Redis 缓存与数据库双写一致性
Posted lisin-lee-cooper
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 缓存与数据库双写一致性相关的知识,希望对你有一定的参考价值。
双写一致性要求:
缓存不能读到脏数据
缓存可能会读到过期数据,但要在可容忍时间内实现最终一致
这个可容忍时间尽可能的小
一.先更新数据库,再更新缓存
线程A更新数据库,线程A更新缓存
线程B更新数据库,线程B更新缓存
因为网络等原因,线程A更新缓存晚于线程B更新缓存,导致缓存与数据库不一致
延时双删
二.先删除缓存,再更新数据库
线程A删除缓存,线程A更新数据库;
线程B查询缓存不存在,更新缓存
线程A更新数据库晚于线程B更新缓存,导致缓存与数据库不一致
三.先更新数据库,再删除缓存
缓存失效,线程A查询数据库,设置缓存
线程B更新数据库,删除缓存
线程A在线程B更新缓存后将之前查询的数据库旧值设置到缓存
最终一致性:
使用canal监听订阅的binlog,发送消息到业务系统实现更新缓存。
以上是关于Redis 缓存与数据库双写一致性的主要内容,如果未能解决你的问题,请参考以下文章
REDIS11_缓存和数据库一致性如何保证解决方案提供Canel解决数据一致性问题