数据缓存双写不一致
2023-02-17 21:26:31 0 举报
数据缓存双写不一致
作者其他创作
大纲/内容
写数据库stock=6
时间轴
读写并发不一致
删除缓存(更新缓存)
线程3
更新缓存
线程2
双写不一致情况
写数据库
线程2更新了线程1的数据库值,线程1更新了线程2redis缓存。造成了数据库保存的是线程2的值,redis保存的是线程1的值
更新缓存stock=10
线程2写数据库(stock=6),线程3读数据库(stock=10)后,更新缓存。造成数据库(stock=6)和redis缓存(stock=10)不一致
删除缓存
写数据库stock=10
线程1
在大并发下,同时操作数据库和缓存会存在数据不一致问题
查缓存(空)
解决方案:1、对于并发几率很小的数据(如个人维度的订单数据、用户数据等),这种几乎不用考虑这个问题,很少会发生缓存不一致,可以给缓存数据加上过期时间,每隔一段时间触发读的主动更新即可。2、就算并发很高,如果业务上能容忍短时间的缓存数据不一致(如商品名称,商品分类菜单等),缓存加上过期时间依然可以解决大部分业务对于缓存的要求。3、如果不能容忍缓存数据不一致,可以通过加分布式读写锁保证并发读写或写写的时候按顺序排好队,读读的时候相当于无锁。4、也可以用阿里开源的canal通过监听数据库的binlog日志及时的去修改缓存,但是引入了新的中间件,增加了系统的复杂度
查询数据库stock=10
0 条评论
下一页