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

如何保证Redis和MySQL数据的一致性刨析

1、常见的缓存更新策略:

定义:主要用来进行redis和mysql的数据同步更新的一些策略
在这里插入图片描述

  1. 内存淘汰:等触发淘汰机制后,刚好淘汰到了用户查询的数据,此时是null,会进行查询数据库并写入到缓存中,此时查询到的数据就是新的,但如果淘汰掉的不是用户查询的数据,每次用户都能够查询到数据,其实这个数据也就是旧数据,数据一致性较差。
  2. 超时剔除:和内存淘汰策略差不多
  3. 主动更新(主要应用策略):由程序员进行编码,在数据库进行更新时候手动更新缓存

2、主动更新策略:

在这里插入图片描述

3、主动更新第一个策略(CAP)

3.1、定义原理

由缓存的调用者在进行更新数据库的同时更新缓存。
在这里插入图片描述
更新数据:在进行数据库数据修改的时候,一般都是删除缓存,然后缓存为空,等待查询时候判空再进行数据库的查询然后更新缓存,而不是每次去做更新数据都进行更新缓存操作。

3.2、先操作缓存还是先数据库?

在这里插入图片描述

  • 先删缓存、后更新数据库(弊端较大):假设一个线程删除了缓存,然后进行更新数据库,此时另外一个线程进行数据的查询,因为数据库操作比缓存操作慢,此时因为缓存未命中重新写入缓存,但是数据库还没更新完毕,此时获取到的数据仍是旧数据。
  • 先更新数据库、后删除缓存:出现并发问题情况几乎没有,可能出现的问题就是刚好查询缓存时候,缓存失效,然后另外一个线程进行数据库更新,此时第一个线程已经将旧的数据重新写入缓存了。获取到的仍然是旧数据,但是发生的几率较低。
  • 双写一致性(延迟双删)
    • 流程
      更新数据库
      删除 Redis 缓存
      短暂延迟(如 500ms)后,再次删除缓存
    • 目的:避免并发情况下 旧数据回写 Redis 的问题。
  • 使用消息队列确保一致性:数据库更新后,发送消息消费消息,删除 Redis,确保 Redis 最终一致

http://www.kler.cn/a/540947.html

相关文章:

  • AI与大数据融合:技术路径与行业赋能
  • 数据仓库和商务智能:洞察数据,驱动决策
  • C# 比较两个List集合内容是否相同
  • 六年级写景作文:美丽的春天
  • 信创领域的PostgreSQL管理员认证
  • 【大数据技术】搭建完全分布式高可用大数据集群(ZooKeeper)
  • 求助DeepSeek帮我开发一个直线审批流程设计页面Vue2.0
  • Linux系统编程之信号基础知识
  • 在cursor/vscode中使用godot C#进行游戏开发
  • Vue智慧商城(1)
  • 【AIGC魔童】DeepSeek v3推理部署:华为昇腾NPU/TRT-LLM
  • 【前端框架与库】「深入理解 Vue 插槽」:类型、用法与实际场景解析,增强组件复用性的利器
  • 9 Pydantic复杂数据结构的处理
  • Expo运行模拟器失败错误解决(xcrun simctl )
  • React 中如何使用 Redux 进行状态管理?
  • 详尽指南:如何在雷电模拟器中设置代理IP
  • [前端]CRX持久化
  • 网络通信的精髓:透彻理解 TCP/IP 的三次握手与四次挥手
  • SpringBoot单机模式,能否支持一万用户请求并发?
  • kafka查看topic消息是否堆积
  • ChatGPT搜索 vs. 推理:如何选择和使用
  • 解锁面向对象编程:Python 类与对象详解
  • 22.[前端开发]Day22-CSS单位-CSS预处理器-移动端视口
  • Kubernetes架构原则和对象设计(三)
  • HarmonyOS Next 方舟字节码文件格式介绍
  • python-leetcode-建立四叉树