登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
生产实践:Redis与Mysql的数据强一致性方案 ...
生产实践:Redis与Mysql的数据强一致性方案
[ 复制链接 ]
殷罗绮
2025-6-9 08:23:12
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
数据库和Redis如何保持强一致性,这篇文章告诉你
目的
Redis和Msql来保持数据同步,并且强一致,以此来提高对应接口的响应速度,刚开始考虑是用mybatis的二级缓存,发现坑不少,于是决定自己搞
要关注的问题点
操作数据必须是唯一索引
如果更新数据不是唯一索引,则数据库更新后的值,与缓存不一致,而查询还会走缓存,而查询的值是脏值。
查询唯一数据,数据值必须是全部字段
假如:B交易查询字段不是全部字段,进行查询放入缓存,A交易进行查询时,从缓存获取,由于A交易需要全部字段,所以就会出现不可预知的问题。
查询缓存数据后,必须要在程序中再次进行条件判断
因为在redis中,存储的的key是唯一索引,所以当查询数据后,只会命中唯一索引的数据,其他附带查询条件不生效。
例如:唯一索引为:user_id ,那么执行
select * from t_user_auth_info where user_id=‘111’ and user_level=‘1’是,条件user_level是不会生效
高并发场景下要注意脏数据的控制
假设是以上流程图,在更新操作,第一步删除缓存后,线程切换到查询线程,查询操作判断缓存中没有数据,就会查询数据库,并把数据存入到缓存中,这时线程在切换到更新线程,进行数据库的更新,这会就会造成,数据库的数据与缓存有不一致性。
最终方案
基于以上问题,我们的最终流程图如下
以上流程图在进行更新操作时,增加删除缓存lock,如果这会查询操作判断缓存中有数据,就直接返回数据,如果没有再次判断有没有存在删除缓存lock,如果有则走数据库查询,并返回,不放入缓存,如果没有则查询数据库,并放入缓存,并返回。
注意:
登记缓存标识时,增加缓存lock失效时间,因为有可能删除缓存和数据库更新成功了,而删除缓存lock失败了,那这样后续查询就都走数据库了,这个方案就失去意义了。
代码实现方案
通过aop对db的操作方法,进行拦截,查询方法采用一个切面,删除和更新方法采用一个切面,然后再按照以上流程进行编写,我们这边是使用框架进行封装,最后只需要开发人员配置以下xml即可
<cache-config>
<cache-entity po="com.demo.po.AuthUser" key-prefix="SYSTEM_Person" po-throws="true" key-expire="" key-expire-time-unit="">
<key-properties>userId</key-properties>
</cache-entity>
</cache-config>
复制代码
扫描下面的二维码关注我们的微信公众帐号,在微信公众帐号中回复◉加群◉即可加入到我们的技术讨论群里面共同学习。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
生产
实践
Redis
Mysql
数据
相关帖子
DBLens 的数据安全、登录方式与离线使用说明
27个行业创新实践一次看|HarmonyOS SDK案例集发布
记一次MySQL binlog日志导致磁盘空间占满的问题
记一次MySQL binlog日志导致磁盘空间占满的问题
印度股票数据 API 对接实战指南(含实时行情与 IPO 数据)
Iceberg 在hadoop大数据数据湖领域这么火
AICube数据集不合法清洗解决方法
【面试题】MySQL 索引的最左前缀匹配原则是什么?
【面试题】MySQL 的存储引擎有哪些?它们之间有什么区别?
掌握相关性分析:读懂数据间的“悄悄话”
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
DBLens 的数据安全、登录方式与离线使用说明
1
114
郦惠
2025-12-16
业界
27个行业创新实践一次看|HarmonyOS SDK案例集发布
0
603
国语诗
2025-12-17
安全
记一次MySQL binlog日志导致磁盘空间占满的问题
0
893
荆邦
2025-12-17
安全
记一次MySQL binlog日志导致磁盘空间占满的问题
0
795
跟尴
2025-12-17
安全
印度股票数据 API 对接实战指南(含实时行情与 IPO 数据)
0
699
裴涛
2025-12-17
安全
Iceberg 在hadoop大数据数据湖领域这么火
0
619
忿媚饱
2025-12-18
安全
AICube数据集不合法清洗解决方法
0
817
田雅宁
2025-12-18
安全
【面试题】MySQL 索引的最左前缀匹配原则是什么?
0
723
荪俗
2025-12-19
安全
【面试题】MySQL 的存储引擎有哪些?它们之间有什么区别?
0
585
焦尔蕾
2025-12-19
业界
掌握相关性分析:读懂数据间的“悄悄话”
0
96
东门芳洲
2025-12-20
回复
(6)
边书仪
2025-10-29 05:35:43
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个有用。
裸历
2025-11-8 03:32:50
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
新版吗?好像是停更了吧。
左丘平莹
2025-11-20 21:45:20
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
很好很强大 我过来先占个楼 待编辑
株兆凝
2025-11-22 21:14:35
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
新版吗?好像是停更了吧。
齐娅晶
2025-11-25 13:48:50
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
懂技术并乐意极积无私分享的人越来越少。珍惜
杠氯
2025-12-8 20:05:58
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
过来提前占个楼
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
殷罗绮
2025-12-8 20:05:58
关注
0
粉丝关注
23
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994891
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9997
6
宋子
9982
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9950
查看更多
今日好文热榜
444
热点 Key 与大 Key 治理——识别、拆分、预
641
Media Extended
319
vlookup的终结者splookup,9个案例讲透查询
846
ROS2之Launch介绍
883
精选 8 个 .NET 开发实用的类库,效率提升
78
精选 8 个 .NET 开发实用的类库,效率提升
568
精选 8 个 .NET 开发实用的类库,效率提升
138
精选 8 个 .NET 开发实用的类库,效率提升
112
精选 8 个 .NET 开发实用的类库,效率提升
609
alist如何将默认布局设置为图片布局
1011
Kali2025.4+Cherry Studio一键配置HexStrik
419
PHP 之高级面向对象编程 深入理解设计模式
416
PHP 之高级面向对象编程 深入理解设计模式
572
升级curl版本,及升级后引起的动态库链接不
295
2025年GEO优化服务商全景对比:五大核心维
779
AI Agent详解
983
Buildah 简明教程:让镜像构建更轻量,告别
610
OceanBase 在滴滴大规模运维经验以及新功能
975
[CSS+]HTML Learn Data Day 2
96
掌握相关性分析:读懂数据间的“悄悄话”