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

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

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

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

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

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

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

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

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

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

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

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

相关推荐
全栈前端老曹2 小时前
【Redis】Redis 客户端连接与编程实践——Python/Java/Node.js 连接 Redis、实现计数器、缓存接口
前端·数据库·redis·python·缓存·全栈
鸡蛋豆腐仙子3 小时前
redis及实现分布式锁的原理
java·redis·分布式·学习·缓存
thginWalker3 小时前
演进篇 · 缓存篇
缓存
J_liaty4 小时前
SpringBoot缓存预热:ApplicationRunner与CommandLineRunner深度对比与实战
spring boot·后端·缓存
果粒蹬i4 小时前
【HarmonyOS】RN of HarmonyOS实战开发项目+SWR数据缓存
缓存·华为·harmonyos
未来之窗软件服务4 小时前
服务器运维(三十六)SSL会话缓存配置指南—东方仙盟
运维·服务器·缓存·ssl·服务器运维·仙盟创梦ide·东方仙盟
野犬寒鸦4 小时前
缓存与数据库一致性的解决方案:实际项目开发可用
java·服务器·数据库·后端·缓存
Re.不晚5 小时前
Redis——主从复制
数据库·redis·缓存
程序猿阿伟15 小时前
《GraphQL批处理与全局缓存共享的底层逻辑》
后端·缓存·graphql
学到头秃的suhian17 小时前
Redis缓存
数据库·redis·缓存