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

分布式缓存与数据库的一致性记录

  1. 用户更新数据库,需要再去更新redis缓存,否则会造成缓存与数据库数据不一致

  2. 一致性的两种方法
    1). 双写模式
    更新完数据库之后,更新redis缓存数据
    问题: 因为请求时间的问题,造成缓存数据不是最新的 数据。
    原因:A先修改key为1,B后修改key为5,mysql先更新为1,后为5,随后更新redis缓存的时候,由于A请求时间过慢,B先更新key为5,最后的结果是缓存key为A修改的1。数据库为5,缓存为1,数据不一致。

2). 失效模式
更新完数据库之后,删除缓存数据,下次新的请求进来再去请求数据库,再去更新缓存。
问题:由于请求时间问题,会造成脏数据,缓存与数据库不一致。
原因:A修改数据库key为1,删除缓存
B修改数据库key为5,在进行修改mysql未完成
D到缓存查询key为null,到数据库查询key(此时还是1),随后存到缓存中(在进行,未完成)
B此时修改数据库完成,缓存此时还是空不需要删除
D在B 存mysql和redis完成之后,更新了key为1
这种情况导致数据库是最新的,但是仍然是A的旧数据,数据不一致。

  1. 解决数据一致性方法
    可以将整个更新过程进行加锁,更新mysql和更新缓存数据加锁,执行完毕再unlock,下一个线程才能进来。
    但是这种方法会导致服务变慢。

如果数据经常修改,加锁会慢。如果要求实时读取,直接读取数据库,缓存里面加上过期时间。

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

相关文章:

  • vue3的语法
  • 【git合并分支自定义提交消息】
  • AttributeError: module ‘PyQt5.QtGui‘ has no attribute ‘QMainWindow‘
  • 基于Java+SpringBoot+Vue前后端分离电商项目
  • Rpc服务消费者(Rpc服务调用者)实现思路
  • FANUC机器人实现2个RO输出信号互锁关联(互补)的具体方法
  • 权威认可|云畅科技再次入选中国信通院「高质量数字化转型产品及服务全景图」
  • 爬虫小白-如何调试列表页链接与详情链接不一样并三种方式js逆向解决AES-ECB
  • Ubuntu 离线部署的常见操作
  • 什么是多运行时架构?
  • 【MySQL】mysql | linux | 离线安装mysqldump
  • 中国农村程序员学习此【JavaScript教程】购买大平层,开上帕拉梅拉,迎娶白富美出任CEO走上人生巅峰
  • 【Python】Web学习笔记_flask(2)——getpost
  • RabbitMQ 教程 | 第5章 RabbitMQ 管理
  • LLM微调 | Adapter: Parameter-Efficient Transfer Learning for NLP
  • 在idea中添加try/catch的快捷键
  • 企业级开发中协同开发与持续集成持续部署
  • 九五从零开始的运维之路(其二十八)
  • iOS--Runloop
  • Doccano工具安装教程/文本标注工具/文本标注自己的项目/NLP分词器工具/自然语言处理必备工具/如何使用文本标注工具
  • windows系统之WSL 安装 Ubuntu
  • 洛谷题解 | P1046 陶陶摘苹果
  • 记一次Apache HTTP Client问题排查
  • Linux获取文件属性
  • String字符串拼接
  • 在矩池云使用Llama2-7B的具体方法
  • API教程:轻松上手HTTP代理服务!
  • 脑网络通信:概念、模型与应用——Brain network communication: concepts, models and applications
  • Docker创建tomcat容器实例后无法访问(HTTP状态 404 - 未找到)
  • oracle数据库dbLink的使用