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

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

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

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

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

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

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

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

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

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

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

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

相关推荐
遇见火星2 小时前
Redis主从复制深度解析:数据高可用与负载均衡的核心方案
数据库·redis·缓存·负载均衡
Ahtacca8 小时前
Redis 五大常用数据类型详解及 Java 客户端(RedisTemplate)操作实战
java·数据库·redis·学习·缓存
C_心欲无痕11 小时前
nodejs - pnpm解决幽灵依赖
前端·缓存·npm·node.js
rchmin11 小时前
Redis集群扩容数据迁移方案分析
redis·缓存
最贪吃的虎12 小时前
Redis 除了缓存,还能干什么?
java·数据库·redis·后端·缓存
独自破碎E1 天前
Spring Boot工程启动以后,怎么将数据库中已有的固定内容打入到Redis缓存中?
数据库·spring boot·缓存
此生只爱蛋1 天前
【Redis】数据类型补充
数据库·redis·缓存
忧郁蓝调261 天前
Redis不停机数据迁移:基于 redis-shake 的跨实例 / 跨集群同步方案
运维·数据库·redis·阿里云·缓存·云原生·paas
奋斗べ青年.1 天前
【redis】了解redis的主从和集群搭建
数据库·redis·缓存
五阿哥永琪1 天前
Caffeine 本地缓存
缓存