当前位置:网站首页>Mysql和Redis如何保证数据一致性
Mysql和Redis如何保证数据一致性
2022-08-02 17:19:00 【drhrht】
文章目录
前言
如何保证数据库和缓存双写一致,下面提供几种方法,来讨论下他们的优缺点。
一、先更新数据库,再更新redis
这种方案,应该没人采用。
如果先更新数据库成功,接着更新redis失败,那么会造成数据不一致,所以这种方法舍弃
二、先更新redis,在更新数据库
这种方案和第一种相似,也具有相同的问题
如果更新reids成功,更新数据库失败,那么同样会造成数据不一致
三 先更新数据库,再删除redis
这种方案,同样会造成数据不一致的问题,但是相比上两个方案,如果他设置key的过期时间,那么保证了数据的最终一致性。如果在更新数据库后删除redis失败,又未设置redis过期时间。那么会造成数据不一致。
如果线程A更新数据库,正准备更新redis时。线程B在更新线程A更新redis前获取了redis中的数据,那么其他数据拿到的数据还是旧数据,如果删除redis失败也会造成数据不一致
解决方案:
1.mysql和redis设置事务,在发生异常时回滚数据
2.redis设置重试机制,在删除失败后进入重试模式
四 先删除redis,再更新数据库
这种方案,同样存在一定几率的不一致现象,但是已经接近最优了。
如果线程A删除了redis,正准备更新数据库。线程B查询了redis没有之后,查询了数据库的旧数据,并且把它写到redis。之后线程A才更新数据成功,会出现数据库和redis的数据不一致
解决方案:延迟双删
线程A在删除redis以及更新数据库后,睡眠一段时间后,再次删除reids中的数据。这个睡眠时间得大于一次查询的时间。
总结
数据一致性没有绝对的保证,要么牺牲性能加锁,要么串行。在高并发下,这些方案都只能做到优化
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢

MySQL索引

Redis的介绍和使用

Flink Learning 9: Configure the idea to develop the flink-Scala program environment

2022安全员-C证考试题库模拟考试平台操作

脉脉上的相亲生意

电烙铁的基础知识

Cpolar application example of data acquisition equipment

Flink SQL builds real-time data warehouse DWD layer

Real-time data warehouse architecture evolution and selection

小程序毕设作品之微信体育馆预约小程序毕业设计成品(8)毕业设计论文模板
随机推荐
年轻人接棒大妈,金价跌回“4字头”,七夕迎黄金消费小热潮
Flink Learning 9: Configure the idea to develop the flink-Scala program environment
Kubernetes:(六)Pod重启策略和状态解释
Red and blue against experience sharing: CS from kill posture
电烙铁的基础知识
NeRF:火爆科研圈的三维重建技术大揭秘
MYSQL下载及安装完整教程
cpolar应用实例之多设备数据采集
Five speakers: seventy genius_platform software platform development 】 【 turn YUY2 RGB24 implementation source code
Navicat for mysql cracked versions installed
navicat创建连接 2002-can‘t connect to server on localhost(10061)且mysql服务已启动问题
潮玩的“第二春”,在哪?
Oracle 11 g rac finished patch, dbca new patches of SQL database also needs to perform?
What is the difference between erp system and wms system
docker安装Oracle之后常用的一些命令
Local broadcast MSE fragments mp4 service
How Tencent architects explained: The principle of Redis high-performance communication (essential version)
DeepMind 首席科学家 Oriol Vinyals 最新访谈:通用 AI 的未来是强交互式元学习
npm install 编译时报“Cannot read properties of null (reading ‘pickAlgorithm‘)“
全面认识二极管,一篇文章就够了