【Redis | 第十篇】Redis与MySQL保证数据一致性(两种解决思路)

embedded/2024/12/22 15:29:18/

在这里插入图片描述

文章目录

  • 10.Redis和MySQL如何保证数据一致性
    • 10.1双写一致性问题
    • 10.2数据高度一致性
    • 10.3数据同步允许延时
      • 10.3.1中间件通知
      • 10.3.2延迟双删

10.Redis和MySQL如何保证数据一致性

10.1双写一致性问题

Redis作为缓存,它是如何与MySQL的数据保持同步的呢?特别是在追求双写一致性的道路上,我们该如何操作呢?

其实有两种情况需要讨论:

  • 数据高度一致性:加锁
  • 数据同步可以有延时
    • 中间件通知(MQ、Canal)
    • 延迟双删(先删除缓存、再修改数据库,经过一段时间,再次删除缓存)

10.2数据高度一致性

想要达到强一致性,我们可以借助Redisson提供的读写锁哦!

  • 共享锁(读锁readLock):一旦加上这个锁,其他线程就可以共享读操作,不会互相干扰,真是好帮手!
  • 排他锁(独占锁writeLock):这个锁更霸道,一旦加上,其他线程就别想读写操作了,得乖乖等着。

10.3数据同步允许延时

10.3.1中间件通知

  • MQ中间件:数据更新后,就通知缓存删除。
  • Canal中间件:Canal伪装成MySQL的从节点,通过读取binlog数据来更新缓存,神奇又方便,而且不需要改业务代码哦!

10.3.2延迟双删

  • 延时双删听起来挺高级,但实际操作起来有点复杂
  • 在更新数据库后,首次删除缓存中的数据,然后经过一段预定的延时(通常是几百毫秒到几秒),再次删除缓存中可能仍然存在的数据。
  • 这个延时的目的是为了确保数据库的更新操作能够完成,避免旧的缓存数据被重新读取。
  • 第一次删除是为了避免在延时期间有新的请求使用到旧的缓存数据,第二次删除则是在数据库更新完成后彻底移除旧数据,以保持数据一致性。

在这里插入图片描述


http://www.ppmy.cn/embedded/25494.html

相关文章

Linux系统安全及应用(1)

目录 一.账号安全控制 系统账号清理 二.密码安全控制 密码安全控制 三.命令历史限制 命令历史限制 四.限制su切换用户 1)将信任的用户加入到wheel组中 2)修改su的PAM认证配置文件 ​编辑五.PAM认证的构成 六.使用sudo机制提升权限…

接收区块链的CCF会议--ISPA 2024 截止7.1 附录用率

会议名称:ISPA CCF等级:CCF C类会议 类别:计算机体系结构/并行与分布计算/存储系统 录用率:2023年录用率19.6%(接收了75篇) Track 4: Security and Blockchain – Blockchain-based applications and s…

学习使用js给指定日期加减指定天数

学习使用js给指定日期加减指定天数 具体代码 具体代码 function add_day(date, days) {if (days undefined || days ) {days 1;}let date_new new Date(date);date_new.setDate(date_new.getDate() days);let month date_new.getMonth() 1; //月份从0开始所以需要1var d…

ETL简介以及使用ETL(Kettle)进行数据接入的具体例子

目录 ETL介绍 ETL简介 ETL包含的三部分 ETL基本概念 ETL资源库 ETL变量 业务表梳理以及接入规划 数据接入流程 业务表梳理 ETL任务规范 接入规划 数据接入中的方便工具 具体例子 导出生产表信息 1、ORACLE 2、MYSQL ETL数据增量抽取任务开发 1、ORACLE通用流程…

C#知识|面向对象编程中实例方法的封装与应用总结

哈喽,你好,我是雷工! 本节学习面向对象编程中实例方法的封装与应用,以下为学习笔记。 01 方法定义 访问修饰符 返回值类型 方法名(参数1,参数2……) {//此处编写方法的主要内容,功能实现的具体过程 return 返回值;//如果方法有返回值需要此语句,如果没有返回值,那…

《Kafka 3.x.x 入门到精通》

Kafka 3.x.x 入门到精通 Kafka是一个由Scala和Java语言开发的,经典高吞吐量的分布式消息发布和订阅系统,也是大数据技术领域中用作数据交换的核心组件之一。以高吞吐,低延迟,高伸缩,高可靠性,高并发&#x…

安装docker后部署一个redis服务

安装 Docker 后,您可以使用 Docker Hub 上提供的 Redis 镜像轻松部署 Redis 服务。以下是在 Docker 中部署 Redis 服务的步骤: 1. 拉取 Redis 镜像: 使用以下命令从 Docker Hub 拉取 Redis 镜像: docker pull redis2. 运行 Red…

yarn的安装与使用

Yarn的安装与使用主要涉及到以下几个步骤: 安装Yarn: 首先,确保您的系统中已安装Node.js和npm。Yarn可以在Windows、MacOS和Linux上运行。使用npm安装Yarn。运行命令npm install -g yarn来安装和升级Yarn。安装完成后,通过运行y…