缓存与数据库双写一致性问题解决方案

其实如果使用缓存,就会出现缓存和数据库的不一致问题,关键在于我们可以接受不一致的时间是多少,根据不同的需求采取不同的实现方案。

第一种:先更新数据库后更新缓存

做法简单,但是并发写情况下,会出现数据的不一致问题,具体不一致的时间长短取决于过期时间的长短

第二种:先删除缓存后更新数据库

并发读写情况下,如果刚删除了缓存,还未执行DB操作的情况下,读线程已经读取旧数据,更新缓存的值,那么数据库还是会出现不一致的问题,时间同样取决于过期时间长短

第三种:先更新数据库后删除缓存

存在问题1、更新数据库和删除缓存直接,这段时间读到的数据是不一致的。2、如果删除缓存失败,那么也会存在一段时间的不一致,时间同样取决于过期时间的长短

第四种:基于第二种,先删除缓存,再更新数据库,为防止第二种情况的发送,使用保底策略,延迟一段时间,再删除缓存

存在问题:1.如果删除缓存失败,那么也会存在一段时间的不一致,时间同样取决于过期时间的长短

2.多次删除缓存,给redis带来一定的压力

第五种:基于第三种,先更新数据库,再使用本地缓存或者消息队列,异步删除缓存。

相关推荐
biubiubiu070624 分钟前
Redis缓存穿透,雪崩,击穿
数据库·redis·缓存
平凡君14 小时前
缓存的今生今世
java·spring·缓存
安的列斯凯奇14 小时前
Redis篇 Redis如何清理过期的key以及对应的解决方法
数据库·redis·缓存
辞半夏丶北笙20 小时前
最近最少使用算法(LRU最近最少使用)缓存替换算法
java·算法·缓存
如风暖阳1 天前
Redis背景介绍
数据库·redis·缓存
lingllllove1 天前
Redis脑裂问题详解及解决方案
数据库·redis·缓存
微光守望者1 天前
Redis常见命令
数据库·redis·缓存
Linux运维老纪1 天前
DNS缓存详解(DNS Cache Detailed Explanation)
计算机网络·缓存·云原生·容器·kubernetes·云计算·运维开发
java1234_小锋2 天前
说说Redis的内存淘汰策略?
数据库·redis·缓存
2的n次方_2 天前
【Redis】set 和 zset 类型的介绍和常用命令
数据库·redis·缓存