数据库-缓存数据一致性

1、不推荐更新缓存 建议删除缓存
2、采用延时双删

先删缓存,

后更新数据库,

延时再删一次缓存

但是会存在问题:改库后延时时间内的数据可能是旧数据

如果业务场景要求,改库成功就不能使用旧数据,可以采用如下优化方案:

新增一个缓存类型,记录key是否被更新过,并且设置自动过期时间

在访问的时候,先查询key是否被更新过,如果没有 查从库,如果有,查主库

3、延时双删第二次删除失败了怎么办

方案一:
业务代码增加重试逻辑

方案二:

利用数据库binlog,单独的服务来处理二次删除的逻辑,既能保证主线程的吞吐量,又能最终保证删除成功

(1)更新数据库数据
(2)数据库会将操作信息写入binlog日志当中
(3)订阅程序提取出所需要的数据以及key
(4)另起一段非业务代码,获得该信息
(5)尝试删除缓存操作,发现删除失败
(6)将这些信息发送至消息队列
(7)重新从消息队列中获得该数据,重试操作。

数据库-缓存数据一致性