ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

redis和数据库的一致性如何保证

redis和数据库的一致性如何保证 1.如何保证缓存和数据库的一致性常用方案Cache Aside写后删缓存双写策略MQ 异步保证最终一致性2.Redis 事务失败能回滚吗不能回滚解决方案使用Lua 脚本保证原子性或在应用层做补偿逻辑应用层怎么补偿 记录操作日志用于补偿。如果是新增数据就删除缓存如果是更新数据就还原旧值或者删除缓存如果是计数器就减回去注意补偿逻辑必须 幂等2.1补偿失败了怎么办记录失败日志告警人工介入定时任务再次补偿3.MySQL 事务回滚了但 Redis 已经写成功了怎么办这是一个分布式数据不一致问题因为MySQL 支持 事务回滚而Redis 不支持回滚。两者不在同一个事务里。我们的目标不是“强行回滚”而是 最终一致性 应用层补偿解决方案通过 本地事务 可靠事件 补偿机制 保证最终一致性。核心思想以 MySQL 为准Redis 允许短暂不一致通过 补偿 / 对账 / 重试 修复✅ 方案一应用层补偿最常用执行流程开启 MySQL 事务写 MySQL写 Redis如果 MySQL 提交失败 → 主动补偿 Redis如果是新增数据就删除缓存如果是更新数据就还原旧值或者删除缓存如果是计数器就减回去注意补偿逻辑必须 幂等补偿失败要 记录日志 / 报警✅ 方案二先写 MySQL后写 Redis推荐mysql写成功再写redis✅ 方案三可靠事件 / MQ进阶MySQL 事务提交成功后发送消息 → 更新 Redis消费者失败 → 重试常用于高并发、核心业务✅ 方案四定期对账兜底定时任务扫描 MySQL对比 Redis 数据不一致 → 自动修复4.为什么不直接删缓存删缓存是 最常见、成本最低的补偿但要注意并发下的 缓存击穿 / 雪崩
返回列表