分布式缓存一致性

一、双写模式

修改数据库之后,也把缓存的内容修改。

缺点:

1、但修改完数据库之后还需要查一下数据库,然后把内容封装写入redis,也加重了数据库访问

2、暂时的脏数据问题:有两次修改数据库的请求,在第一次修改的时候 由于卡顿问题,第二次修改请求也开始执行,并且修改完缓存,这时候第一次的请求恢复正常,开始修改缓存,就导致了最终的缓存时第一次修改的内容,而数据库内容是第二次修改的内容,出现缓存与数据库不一致现象,但是数据趋于稳定的时候,缓存过期了最终回读到与数据库一直的数据

 

二、失效模式

数据库更新之后,删除缓存,下一次访问就会查到最新的数据并且缓存

缺点 暂时脏数据问题: 还是有两个改数据请求,第一个修改数据库, 并且删除缓存成功了,这时候第二个改数据请求也发起了,正在修改数据库,但是同时来了一个读数据的请求,这时候读数据,发现没有缓存,于是从数据库读取数据,读到了第一次修改数据库的内容,这个时候第二次改数据的请求刚修改完数据库,并且执行了删缓存的操作,之后读数据的请求才开始更新缓存,于是还是同样的情况,数据库的内容时第二次修改的内容,缓存的内容时第一次修改的内容。

 

 解决方案

1、给缓存设置到期时间,减少脏数据的存活时间

2、添加读写锁,从把修改数据库和修改缓存变成相对原子操作,抱着读取到最新的数据

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值