缓存一致性问题

本文探讨了在高并发场景下,如何避免缓存和数据库更新的不一致性问题。主要关注了四种可能的方案:先更新缓存再数据库、反之、仅更新缓存和删除缓存后更新数据库。最终推荐采用先更新数据库后删除缓存,配合异步删除和数据库复制策略,以确保数据一致性并减少资源浪费。
摘要由CSDN通过智能技术生成

场景

系统使用redis等缓存来提高读性能

  • 读请求

    先读缓存,如果缓存不存在,则从数据库读取,并重建缓存; 同时,写入缓存中的数据,都设置失效时间

  • 写请求

    修改一条数据时,不仅要更新数据库,也要连带缓存一起更新。缓存一致性的重点

可能的方案

一下几种方案在并发异常的情况下都会存在不一致问题

更新缓存和更新数据库

先更新缓存,后更新数据库

先更新数据库,后更新缓存

缓存利用率低:每次数据发生变更,都「无脑」更新缓存,但是缓存中的数据不一定会被「马上读取」,这就会导致缓存中可能存放了很多不常访问的数据,浪费缓存资源

删除缓存和更新数据库

先删除缓存,后更新数据库

先更新数据库,后删除缓存

推荐方案

推荐 先更新数据库,后删除缓存

  • 为避免更新数据库成功,而删除缓存失败,所以需要重试,我们使用异步删除的策略,引入消息队列,由消费者删除缓存,消费者删除失败需要重试

consistent

  • 考虑到数据库读写分离+主从复制,所以发送给MQ的为延时消息

参考博客

https://baijiahao.baidu.com/s?id=1710566894419278870

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值