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

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

场景分析

  1. Redis 用来实现应用和数据库之间读操作的缓存层,主要目的是减少数据库 IO ,还可以提升数据的 IO 性能。
  2. 当应用程序需要去读取某个数据的时候,首先会先尝试去 Redis 里面加载,如果命中就 直接返回。如果没有命中,就从数据库查询,查询到数据后再把这个数据缓存到 Redis里面。
  3. 一份数据 ,同时保存在数据库和 Redis 里面,当数据发生变化的时候,需要同时更新 Redis 和 MySQL,由于更新是有先 后顺序的 ,并且它不像 MySQL中的多表事务操作 ,可以满足 ACID 特性,所以就会出现数据一致性问题。
  4. 如果先更新数据库,再更新缓存,如果缓存更新失败,就会导致数据库和 Redis 中的数据不一致。

问题分析

  1. 如果是先删除缓存,再更新数据库,理想情况是应用下次访问 Redis 的时候,发现 Redis 里面的数据是空的,就从数据库加载保存到 Redis 里面,那么数据是一致的。
  2. 在极 端情况下,由于删除 Redis 和更新数据库这两个操作并不是原子的,所以在这个过程如果有其他线程来访问 数据,还是会存在数据不一致问题。
  3. 所以 ,如果需要在极端情况下仍然保证 Redis 和 MySQL 的数据一致性 ,就只能采用最终一致性方案。

最终一致性方案

  1. 基于 RocketMQ 的可靠性消息通信 ,来实现最终一致性
  2. 通过 Canal 组件,监控 MySQL 中 bin log 的日志,把更新后的数据同步到 Redis 里面
  3. 基于SEATA组件提供的TCC模式,也可实现最终一致性
  4. 另外,还可以了解下延迟双删策略,核心步骤是删除redis,更新数据库,延迟500ms,再删除Redis

强一致方案

  • 如果某些业务场景下,不能接受最终一致性方案,可以考虑使用分布式读写锁机制
  • 读写锁机制可确保同时只有一个线程可以对数据进行修改,并且在数据修改的过程中,读线程需要进行等待

小结

  • 总体上来说,每个方案都不完美,需要根据具体需求和场景灵活选择适合的策略,并注意权衡性能、可靠性和成本等因素。

相关文章:

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

场景分析 Redis 用来实现应用和数据库之间读操作的缓存层,主要目的是减少数据库 IO ,还可以提升数据的 IO 性能。当应用程序需要去读取某个数据的时候,首先会先尝试去 Redis 里面加载,如果命中就 直接返回。如果没有命中&#xf…...

VR虚拟仿真技术在道路桥梁中有哪些具体应用?

虚拟现实(VR)是一种新兴的技术,可以为桥梁工程提供许多应用场景。以下是一些可能的应用场景: 1.桥梁设计和模拟 VR元宇宙可以用于桥梁的设计和模拟。工程师可以使用VR技术来创建桥梁的三维模型,并对其进行测试和优化。这可以帮助工程师更好地…...

如何找到死锁的线程?_java都学什么

在Java中,死锁是指两个或多个线程被无限地阻塞,等待彼此持有的资源,从而导致程序无法继续执行的情况。死锁通常是由于线程之间循环等待资源而产生的。要找到死锁的线程,可以采用以下方法: 1.线程转储(Thread Dump) 通过…...

MFC遍历目录包括子目录下所有文件、特定类型文件

文章目录 用法实现遍历所有文件遍历所有txt文件用法 vector<CString> v; //获取所有文件 GetFilePath(v,L"D:\\test\\"); //文件路径储存在容器里面,遍历容器 for(int i=0...

Kubernetes 集群calico网络故障排查思路

报错calico/node is not ready: BIRD is not ready: BGP not established with 172.16.0.20,172.16.0.30 \\calico未准备好&#xff0c;BGP协议不能与172.16.0.20,172.16.0.30内网IP地址连接 BGP协议:边界网关协议 访问k8s的dashboard界面无法访问网站&#xff0c;查看pod&am…...

OBS视频视频人物实时扣图方法(四种方式)

图片擦除一些杂乱图像 参考&#xff1a;https://www.bilibili.com/video/BV1va411G7be https://github.com/Sanster/lama-cleaner第一种&#xff1a;色度键选项 第二种&#xff1a;浏览器建立窗口选项 参考视频&#xff1a;https://www.bilibili.com/video/BV1WS4y1C7QY http…...

DROP USER c##xyt CASCADE > ORA-01940: 无法删除当前连接的用户

多创建了一个用户&#xff0c;想要给它删除掉 一 上执行过程&#xff0c;确实删除成功了 Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing optionsSQL> DR…...

【JAVA】-【IO流】

文章目录 FileReader读入数据的基本操作FileReader中使用reader()FileWrite写出数据的操作使用FileInputStream、FileOutputStream操作图片缓冲流&#xff08;字节型&#xff09;实现非文本文件的复制 复制文本文件也可以使用字节流&#xff0c;但是不要在内存中读出来&#xf…...

PoseFormer:基于视频的2D-to-3D单人姿态估计

3D Human Pose Estimation with Spatial and Temporal Transformers论文解析 摘要1. 简介2. Related Works2.1 2D-to-3D Lifting HPE2.2 GNNs in 3D HPE2.3 Vision Transformers 3. Method3.1 Temporal Transformer Baseline3.2 PoseFormer: Spatial-Temporal TransformerSpati…...

Fortinet发布2023年第二季度财报

全球网络与安全融合领域领导者Fortinet&#xff08;Nasdaq&#xff1a;FTNT&#xff09;&#xff0c;于近日公布2023年第二季度财报。 Fortinet 创始人、董事长兼首席执行官谢青表示&#xff1a;“作为业内领先的网络安全平台和安全组网厂商&#xff0c;得益于当下对整合型供应…...

智慧消防 | 气体灭火系统压力在线监测正当其时

气体灭火设备在消防安全系统中扮演着重要的角色。根据最新版的《气瓶安全技术规程》TSG23-2021规定&#xff0c;IG541气体钢瓶需要每3年进行一次检测。未按时进行检测可能导致压力掉压、瓶体外部锈蚀、钢瓶位置钢瓶内部腐蚀等风险&#xff0c;这些问题都可能对消防安全和效能产…...

并查集练习 — 扩展问题(二)

根据并查集练习 —岛屿数量的问题再次扩展&#xff1a; 原题是给定一个二维数组matrix&#xff08;char[][]&#xff09;&#xff0c;里面的值不是1就是0&#xff0c;上、下、左、右相邻的1认为是一片岛。返回matrix中岛的数量。 扩展为&#xff1a;如果是中国的地图&#xff0…...

iTOP-i.MX8MM开发板添加 isb 转串口设备驱动

对于通过 USB 接口访问的模块&#xff0c;在 Linux 内核中集成 USB 驱动程序。我们需要配置内核选中支持 GSM 和 CDMA 模块的 USB 转串口驱动 > Device Drivers -> USB support (USB_SUPPORT [y]) -> USB Serial Converter support (USB_SERIAL [y]) -> USB dr…...

Golang实现Redis分布式锁解决秒杀问题

先写一个脚本sql&#xff0c;插入2000个用户 INSERT INTO sys_users (mobile, password) SELECT numbers.n AS mobile,$2a$10$zKQfSn/GCcR6MX4nHk3MsOMhJnI0qxN4MFdiufDMH2wzuTaR9G1sq AS password FROM (SELECT ones.n tens.n*10 hundreds.n*100 thousands.n*1000 1 AS n…...

狂神说-通俗易懂的23种设计模式

狂神说-通俗易懂的23种设计模式 文章目录 1、设计模式概述2、OOP七大原则4、工厂模式5、抽象工厂模式6、建造者模式7、原型模式8、适配器模式9、桥接模式10、静态代理模式11、静态代理再理解12、动态代理详解 1、设计模式概述 设计模式的基本要素&#xff1a; 1、模式名称 2、…...

VR实景导航——开启3D可视化实景导航新体验

数字化时代&#xff0c;我们大家出门在外都是离不开各种导航软件&#xff0c;人们对导航的需求也越来越高&#xff0c;而传统的导航软件由于精度不够&#xff0c;无法满足人们对真实场景的需求&#xff0c;这个时候就需要VR实景导航为我们实景指引目的地的所在。 VR实景导航以其…...

《HeadFirst设计模式(第二版)》第四章代码——工厂模式

代码文件目录结构&#xff1a; Cheese: 原料ingredient类中只以Cheese为例&#xff0c;不重复展示&#xff1a; package Chapter4_FactoryPattern.abstractFactoryPattern.Ingredient;/*** Author 竹心* Date 2023/8/4**/public abstract class Cheese {String name;String g…...

拖拽宫格vue-grid-layout详细应用及案例

文章目录 1、前言2、安装3、属性4、事件5、占位符样式修改6、案例 1、前言 vue-grid-layout是一个适用于vue的拖拽栅格布局库&#xff0c;功能齐全&#xff0c;适用于拖拽高度/宽度自由调节的布局需求&#xff0c;本文将讲述一些常用参数和事件&#xff0c;以及做一个同步拖拽…...

sanyo三洋摄像机卡有部分坏块恢复案例

sanyo三洋&#xff0c;这个品牌的摄像机真的是罕见。实际上日系摄像机领域就两个公司&#xff0c;一个是佳能一个索尼&#xff0c;其它的都厂商基本上全是用这两家公司的方案&#xff0c;当然松下这个怪咖除外&#xff01;下面我们看看三洋的恢复案例。 故障存储:16G SD卡 故…...

【C++】STL——set和map及multiset和multiset的介绍及使用

&#x1f680; 作者简介&#xff1a;一名在后端领域学习&#xff0c;并渴望能够学有所成的追梦人。 &#x1f681; 个人主页&#xff1a;不 良 &#x1f525; 系列专栏&#xff1a;&#x1f6f8;C &#x1f6f9;Linux &#x1f4d5; 学习格言&#xff1a;博观而约取&#xff0…...

Solid Converter 10.1【PDF编辑器】办公必备工具套装!

如大家所熟悉的&#xff0c;‌Solid Converter‌是一款功能强大且应用较为广泛的一系列专业文档处理工具&#xff0c;主要用于 PDF文件的转换、编辑、创建与扫描‌。目前比较常用的版本为Solid Converter 10.1&#xff0c;深受使用者的青睐。接下来&#xff0c;小编将从使用场景…...

LAMMPS高级功能:如何实现量子力学/分子力学(QM/MM)耦合模拟

LAMMPS高级功能&#xff1a;如何实现量子力学/分子力学(QM/MM)耦合模拟 【免费下载链接】lammps Public development project of the LAMMPS MD software package 项目地址: https://gitcode.com/gh_mirrors/la/lammps 量子力学/分子力学(QM/MM)耦合模拟是计算化学和材…...

BFS算法

题目解题思路代码#include <iostream> #include <queue> #include <cstring> using namespace std;typedef pair<int,int> PII; const int N410; int n,m,x,y; int dist[N][N];// 骑士8个移动方向 int dx[]{1,2,2,1,-1,-2,-2,-1}; int dy[]{2,1,-1…...

3个核心功能让你的AMD处理器性能提升20%:SMUDebugTool零基础上手与性能调优实战

3个核心功能让你的AMD处理器性能提升20%&#xff1a;SMUDebugTool零基础上手与性能调优实战 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table…...

保姆级教程:手把手教你用Dify 0.6.0源码搭建自己的AI工作流引擎(附避坑指南)

从零构建AI工作流引擎&#xff1a;Dify 0.6.0源码实战指南 当你第一次打开Dify的源码仓库&#xff0c;可能会被那些复杂的目录结构和抽象类搞得一头雾水。别担心&#xff0c;三周前我也和你一样&#xff0c;直到我亲手将这套系统跑起来并修改了第一个工作流节点。本文将带你用最…...

英雄联盟录像编辑终极指南:免费开源工具League Director完全教程

英雄联盟录像编辑终极指南&#xff1a;免费开源工具League Director完全教程 【免费下载链接】leaguedirector League Director is a tool for staging and recording videos from League of Legends replays 项目地址: https://gitcode.com/gh_mirrors/le/leaguedirector …...

高效挖掘论文开源项目的五大实战平台

1. 科研必备&#xff1a;五大开源代码平台全景解析 刚入行AI那会儿&#xff0c;最头疼的就是复现论文。明明算法原理都看懂了&#xff0c;可一动手就发现作者留了"课后习题"——关键实现细节全在"详见代码"四个字里。后来我摸索出一套方法论&#xff1a;与…...

Face3D.ai Pro在动画制作中的应用:快速生成角色面部绑定基础模型

Face3D.ai Pro在动画制作中的应用&#xff1a;快速生成角色面部绑定基础模型 1. 动画制作中的面部绑定挑战 在传统动画制作流程中&#xff0c;角色面部绑定是最耗时且技术要求最高的环节之一。一个标准的面部绑定流程通常包括&#xff1a; 3D扫描或手动建模&#xff08;2-3天…...

别再手动调字号了!用algorithm宏包搞定LaTeX伪代码排版(附完整代码)

LaTeX伪代码排版进阶指南&#xff1a;从字体调整到专业级算法展示 在学术论文写作中&#xff0c;尤其是计算机科学和人工智能领域&#xff0c;算法的清晰呈现几乎与算法本身同等重要。许多研究者花费大量时间优化算法性能&#xff0c;却常常忽视算法描述的可读性——这就像精心…...

数据结构之并查集(Union-Find)

并查集&#xff08;Union-Find&#xff09;详解 1. 引言 并查集&#xff08;Union-Find&#xff09;是一种高效的数据结构&#xff0c;主要用于解决动态连通性问题。它能够快速地判断两个元素是否属于同一个集合&#xff0c;以及将两个不同的集合合并成一个集合。并查集在图论、…...