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

本文主要是介绍【Redis | 第十篇】Redis与MySQL保证数据一致性(两种解决思路),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

文章目录

  • 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延迟双删

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

在这里插入图片描述

这篇关于【Redis | 第十篇】Redis与MySQL保证数据一致性(两种解决思路)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940139

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock