当前位置: 首页 > java >正文

延时双删-争议与我的思路-001

目录

  • 概括
    • 大概思路
    • 目的
    • 场景
    • 思路一
      • 退货
      • 时间差
    • 思路2
    • 思路3
  • 最后

概括

延时双删,是指在代码中删除两次缓存.
第一次自己访问,先删除.之后直接访问数据库获得数据

第二次是指 在第一步之后,在删除一次缓存的数据

大概思路

不进行延时双删的.寻找别的解决方法

目的

主要是为了解决数据库和缓存之间数据不一致的情况
如果在详细解释,就是另外的请求操作了对应的这条数据
比如
抢购的情况,别的用户抢到了需要对库存进行操作,在持久化,就是落库

场景

这里不详细写了.

思路一

数据分片,对数据进行分片.比如一条数据,的字段值是:10
可能是销售的场景,如果访问的频率在秒内比较大,就是每秒100个,那么用户请求
从缓存里面获取的不是最新的数据

数据分片,就是以关键字段,进行拆分

比如,上面的数据,count 是 10,
那么就拆分成10条数据.拆分到别的表里面,在放到缓存里面
比如 redis 的 list,如果用户1抢购商品,用户2也抢购商品,这时候请求就到了后端,
但是用户2网络比较好,请求先到服务,服务在发送请求到redis里面
用户1的请求后到,这时候redis执行命令

用户2 的命令redis先执行,执行pop命令,用户1在执行一遍pop命令

而redis是线程安全的. 服务实例获取的数据如果是空的话证明商品被抢完了.

退货

如果发生了退货,那么就对应的该一条数据状态即可.
在将这条数据放到redis里面

其他的用户在页面进行刷新,请求到了服务,而服务读取
redis,可以获取到这条数据

时间差

这里会发生时间差,导致用户刷新会获取不到最新数据
具体就不解决了.如果是抢手的,用户实际体验中
每次刷新的数据都会和后台不一致

思路2

思路2就是对数据加版本号

数据存入的数据加上版本号.服务实例1读取到的数据和redis不一致的情况下,就等待
而不是进行删除操作

就是不知道行不行 有心人可以推演一下逻辑看看到底行不行

思路3

思路3和思路二类似,但是版本号只有两个值,就是0和1

最后

文章写在失业的第X天.如果转载请说明来源

http://www.xdnf.cn/news/7138.html

相关文章:

  • 动态通讯录程序
  • P1009 [NOIP 1998 普及组] 阶乘之和
  • 深入理解 LangChain 文档处理机制:Document 类与文档加载器详解
  • uni-app学习笔记七-vue3事件处理
  • 优化 Spring Boot 应用启动性能的实践指南
  • 单片机超频怎么搞?
  • 实时时钟项目设计
  • 腾讯云证书过期提醒的应对措施,Caddy 自动管理的 Let‘s Encrypt 证书.
  • 使用国内源加速Qt在线安装
  • Docker拉取镜像报错Error response from daemon: Get “https://registry-1.docker.io/v2/“
  • 测试--测试分类 (白盒 黑盒 单元 集成)
  • vscode中Debug c++
  • Android开发-列表类视图
  • 亚马逊新品3周冲刺BSR前10:数据驱动的冷启动破局指南
  • 模型评估与调优(PyTorch)
  • 四品种交易策略
  • MetaMask安装及使用-使用水龙头获取测试币的坑?
  • C++ThreadPool
  • 回溯实战篇3
  • 新电脑软件配置二:安装python,git, pycharm
  • 2025年PMP 学习二十 第13章 项目相关方管理
  • docker-compose部署项目(springboot服务)以及基础环境(mysql、redis等)ruoyi-ry
  • 【数字电路】第七章 脉冲波形的产生与整形电路
  • 【推荐】新准则下对照会计报表172个会计科目解释
  • Gartner《如何将生成式人工智能(GenAI)集成到应用架构》学习心得
  • 【Docker 新手入门指南】第六章:容器操作
  • Spring3+Vue3项目中的知识点——JWT
  • 2.2.1
  • 抖音视频下载工具 v1.1 自用分享
  • 26考研——进程与线程_同步和互斥_同步与互斥的基本概念(2)