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

缓存与数据一致性问题

1、更新了数据库,再更新缓存
假设数据库更新成功,缓存更新失败,在缓存失效和过期的时候,读取到的都是老数据缓存。
2、更新缓存,更新数据库
缓存更新成功了,数据库更新失败,是不是读取的缓存的都是错误的。
以上两种,全都不推荐。
3、先删除缓存,再更新数据库
有一定的使用量。即使数据库更新失败。缓存也可以会刷。
存在的问题是什么?
高并发情况下!!
比如说有两个线程,一个是 A 线程,一个是 B 线程。
A 线程把数据删了,正在更新数据库,这个时候 B 线程来了,发现缓存没了,又查数据,又放入缓存。缓存里面存的就一直是老数据了。
延迟双删。更新完数据库之后,我再删一次。
扩展思路
1、消息队列补偿
删除失败的缓存,作为消息打入 mq,mq 消费者进行监听,再次进行重试刷缓存。
2、canal
监听数据库的变化,做一个公共服务,专门来对接缓存刷新。优点业务解耦,业务太多冗余代码复杂度。

http://www.lryc.cn/news/371304.html

相关文章:

  • 2024年上海高考作文题目(ChatGPT版)
  • .net 调用海康SDK以及常见的坑解释
  • KVM+GFS高可用
  • C++迈向精通:当我尝试修改虚函数表
  • IDEA 高效插件工具
  • SQL入门大全
  • 【深度优先搜索 广度优先搜索】297. 二叉树的序列化与反序列化
  • App UI 风格,引领设计风向
  • TIM—通用定时器高级定时器
  • 【数据结构与算法(C语言)】循环队列图解
  • 私域流量转化不济的原因
  • 百万上下文RAG,Agent还能这么玩
  • 【后端开发】服务开发场景之高可用(冗余设计,服务限流,降级熔断,超时重试,性能测试)
  • 在 Selenium 中更改 User-Agent | 步骤与最佳实践
  • 2024酒店IPTV云桌面系统建设方案
  • java Thrift TThreadPoolServer 多个processor 的实现
  • 失眠焦虑的解脱之道:找回内心的平静
  • OLED柔性屏的显示效果如何
  • 百货商城优选 伊利牛奶推出全国首款减甲烷环保学生奶
  • Fluid 1.0 版发布,打通云原生高效数据使用的“最后一公里”
  • 软件测试--第十一章 设计和维护测试用例
  • 前端只允许一次函数调用
  • visdom使用时所遇的问题及解决方法
  • 密封类(sealed class)
  • 私域引流宝PHP源码 以及搭建教程
  • 磁盘管理 以及磁盘的分区 详细版
  • 加码多肤色影像技术 这是传音找到的“出海利器“?
  • C++方法封装成dll及C#调用示例
  • 定时清理Linux服务器缓存shell脚本
  • Guava常用方法