数据库-缓存数据一致性
1、不推荐更新缓存 建议删除缓存
2、采用延时双删
先删缓存,
后更新数据库,
延时再删一次缓存
但是会存在问题:改库后延时时间内的数据可能是旧数据
如果业务场景要求,改库成功就不能使用旧数据,可以采用如下优化方案:
新增一个缓存类型,记录key是否被更新过,并且设置自动过期时间
在访问的时候,先查询key是否被更新过,如果没有 查从库,如果有,查主库
3、延时双删第二次删除失败了怎么办
方案一:
业务代码增加重试逻辑
方案二:
利用数据库binlog,单独的服务来处理二次删除的逻辑,既能保证主线程的吞吐量,又能最终保证删除成功
(1)更新数据库数据
(2)数据库会将操作信息写入binlog日志当中
(3)订阅程序提取出所需要的数据以及key
(4)另起一段非业务代码,获得该信息
(5)尝试删除缓存操作,发现删除失败
(6)将这些信息发送至消息队列
(7)重新从消息队列中获得该数据,重试操作。