redis如何保证缓存与数据库的数据一致性?

面试

缓存和数据库的双写一致性问题,本质上是分布式系统下两个数据源的同步问题,没有完美方案,只有取舍。

1)先更新缓存,再更新数据库

2) 先更新数据库,再更新缓存

3)先删缓存,再更新数据库

以上三种在并发场景下都容易出现数据不一致,不推荐。


4)先更新数据库,再删缓存

实时一致性要求高的场景首选,虽然极端情况下会短暂不一致,但概率很低

5)缓存双删

先删缓存、更新数据库、延迟再删一次,能解决"先删缓存再更新数据库"的并发问题

6) Binlog 异步更新

用 Canal 监听 MySQL Binlog,通过消息队列异步更新缓存,最终一致性最好


实际项目中怎么选?对实时性要求高就用"先更新数据库再删缓存",对一致性要求高又能接受延迟就用 Binlog 方案。

相关推荐
香蕉大香蕉(06敬畏市场)3 分钟前
MySQL 单点详解(06)
java·数据库·mysql·博客·实习
CodeHackerBhx5 分钟前
MySQL 迁达梦踩坑实录:FIND_IN_SET、timestamp(6) 和一整批要改的函数
数据库·mysql·达梦·信创·数据库迁移
n 55!w !10816 分钟前
MySQL笔记整理2
数据库·笔记·mysql
李纲明1 小时前
WordPress 提示「建立数据库连接时出错」:先核 wp-config 与数据库服务,再查表损坏与磁盘配额
数据库·wordpress·devdiy
freejackman1 小时前
【架构篇】双遍历 + 多栈协同:手撸 SQL 血缘引擎的架构思考
java·大数据·数据库·hive·sql·架构·spark
杨云龙UP1 小时前
TDengine 社区版磁盘空间不足故障处理 SOP:历史日志清理、日志保留策略及数据保留 200 天
数据库·时序数据库·tdengine·tsdb·历史日志清理·trim database·logkeepdays
betazhou1 小时前
MySQL Oracle官方备份工具
数据库·mysql·oracle
一万年太久。1 小时前
mysql主从复制
数据库·mysql
车载中间件通信2 小时前
[TC8测试]TCP_FLAGS_PROCESSING_06
数据库·网络协议·tcp/ip·中间件·tc8
呆萌很2 小时前
达梦数据库(DM)和MySQL核心区别
数据库