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

news2024/11/25 4:57:22

在这里插入图片描述

文章目录

  • 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.coloradmin.cn/o/1634642.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

泽攸科技无掩膜光刻机在MEMS压力传感器制造中的应用

在当今的科技快速发展时代,微电子机械系统(MEMS)技术已成为推动现代传感器技术革新的关键力量。MEMS压力传感器,作为其中的重要分支,广泛应用于生物医学、航空航天、汽车工业等多个领域。随着对传感器性能要求的不断提…

网络工程专业考研的方向有哪些?

前言 网络工程专业的学生在考研时可选择的专业或方向包括:物联网、计算机网络技术、信息安全、信息与通信工程等。 1)物联网:“物联网就是物物相连的互联网”,有两层意思:第一,物联网的核心和基础仍然是互…

【C++干货基地】探索C++模板的魅力:如何构建高性能、灵活且通用的代码库(文末送书)

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 哈喽各位铁汁们好啊,我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的…

2024.4.23 LoadRunner 测试工具详解 —— VUG

目录 引言 LoadRunner 三大组件之间的关系 LoadRunner 脚本录制 启动并访问 WebTours 脚本录制 编译 运行(回放) LoadRunner 脚本加强 事务插入 插入集合点 插入检查点 参数化 ​编辑 打印日志 引言 问题: 此处为啥选择使用 Lo…

算法设计与分析4.1 迷宫问题 栈与队列解法、打印矩阵、三壶问题、蛮力匹配

1.ROSE矩阵 实现&#xff1a; 使用算法2 分析&#xff1a; 每半圈元素值的增长规律变换一次 设增量为t&#xff0c;每半圈变换一次t <— -t . 设矩阵边长为i&#xff0c;每半圈的元素个数是2*(i-1)个&#xff0c;hc为记数变量&#xff0c;则1≤hc<2i-1&#xff0c;前1/…

海外仓的精细化运营:现状、建议和落地操作指南

在跨境电商飞速发展的今天&#xff0c;海外仓运营模式是否足够精细化&#xff0c;是海外仓企业能否赢得竞争的关键。除了单纯的提升仓储能力之外&#xff0c;还需要关注效率的提升、技术革新和管理战略的升级。 从数据上看&#xff0c;大部分海外仓在精细化管理道路上面临的主要…

Spring AOP详解,简单Demo

目录 一、Spring AOP 是什么&#xff1f; 二、学习AOP 有什么作用&#xff1f; 三、AOP 的组成 四、 Spring AOP 简单demo 一、Spring AOP 是什么&#xff1f; Spring AOP&#xff08;Aspect-Oriented Programming in Spring&#xff09;是Spring框架中的一个重要组件&…

preg_match详解(反向引用和捕获组)

在讲preg_match函数之前&#xff0c;我们先了解一下什么是php可变变量 php可变变量 在PHP中双引号包裹的字符串中可以解析变量&#xff0c;而单引号则不行 也就是在php中&#xff0c;双引号里面如果包含有变量&#xff0c;php解释器会将其替换为变量解释后的结果&#xff1b…

基于 SpringCloud 的在线交易平台乐优商城的设计与实现(三)

基于 SpringCloud 的在线交易平台乐优商城的设计与实现 第3章 系统分析与设计3.1 系统基本功能描述3.2 可行性分析3.3 系统需求分析3.3.1 商家功能3.3.2 消费者功能&#xff1a;3.3.3 系统功能要求3.3.4 系统运行环境 3.4 系统开发工具3.4.1 IntellijIDEA3.4.2 Mysql3.4.3 Mave…

C/C++ 入门(9)编译链接

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;C 目录 一、域 1、分类 2、搜索顺序 二、编译链接 1、代码在形成可执行文件的过程 2、符号表 三、问题 1、带有缺省参数的函数声明和定义分离 一、域 1、分类 域&#xff1a;全局域、局部域、命…

第12章 消息服务

第12章 消息服务 12.1 JMS1. 简介2. ActiveMQ安装Linux安装命令 3. 整合SpringBoot ****************************************************** 12.1 JMS 1. 简介 2. ActiveMQ安装 Linux安装命令 //下载 wget http://mirrors.hust.edu.cn/apache/activemq/5.15.16/apache-acti…

JAVA系列 小白入门参考资料 类和对象(2)

目录 小引 1. this this引用 this的特性 this的使用 2. 对象的构造及初始化 如何初始化对象 构造方法 利用构造方法初始化对象的三种方式 方式一 方式二 方式三 直接初始化 小引 上一篇文章我们讨论到 如果创立类和对象&#xff0c;并且如何实例化对象和怎样…

Vue+Element UI el-progress进度条内显示自定义数字及文字

需求 进度条内展示 具体的数字值&#xff0c;进度条外展示 百分比数值 数据 data() {return {reNum: 3214,rePer:40,warmPer: 40,warmNum:2132,}}因为样式要求&#xff0c;显示的百分数也是自己写的哈 &#xff0c;没有用进度条自带的 代码 <div class"pick"&g…

Java学习3:程序流程控制

Java程序流程控制 1.执行顺序 顺序结构分支顺序 if,switch 循环结构 for ,while ,do-while 2.if分支 三种形式 if(条件表达式){} else if(){} else{}3.switch分支 string week "周一"; switch(week){case "周一":stem.out.println("周一&qu…

六西格玛黑带考试:一场心灵与智慧的较量

终于踏过了六西格玛黑带考试这座大山&#xff0c;心中的激动与释然如波涛汹涌。这场考试&#xff0c;不仅仅是对我知识的检验&#xff0c;更是对我毅力与决心的考验。 备考的日子里&#xff0c;我仿佛进入了一个全新的世界。从统计学的深邃到流程优化的细致&#xff0c;每一个…

C++入门第二节

点赞关注不迷路&#xff01;&#xff0c;本节涉及c入门关键字、命名空间、输入输出... 1. C关键字 C总计63个关键字&#xff0c;C语言32个关键字 asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenam…

在STM32上实现嵌入式人工智能应用

引言 随着微控制器的计算能力不断增强&#xff0c;人工智能&#xff08;AI&#xff09;开始在嵌入式系统中扮演越来越重要的角色。STM32微控制器由于其高性能和低功耗的特性&#xff0c;非常适合部署轻量级AI模型。 本文将探讨如何在STM32平台上实现深度学习应用&#xff0c;…

【活动】AIGC 技术的发展现状与未来趋势

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 AIGC 技术的发展现状与未来趋势引言AIGC技术的发展现状文本生成图像生成音频生成…

Git中单独的功能特性分支是什么含义

在Git中&#xff0c;一个"功能特性分支"&#xff08;通常简称为“特性分支”&#xff09;是指从主开发分支&#xff08;比如main或master&#xff09;独立出来的分支&#xff0c;专门用于开发一个新功能、修复一个bug&#xff0c;或者进行实验性的尝试。使用特性分支…

【Python BUG】connect: permission denied.

问题描述 解决方案 本质是权限问题 sudo密码即可