方案1:同步删除
核心流程:
先更新数据库数据
然后删除缓存数据
存在的问题:
1)删除缓存失败存在脏数据
2)难以收拢所有更新数据库入口
直接在数据库中修改,缓存不会改变
方案2:延迟双删
核心流程:
删除缓存数据
更新数据库数据
等待一小段时间
再次删除缓存数据
存在的问题:
1)延迟时间难以确认
到底是延迟一秒或者是几秒,这个其实很难确认,你总不能延迟几分钟吧,因为你如果延迟几分钟,那这几分钟可能就存在脏数据了,所以这个时间很难确定。
2)无法绝对保障数据的一致性
方案3:异步监听binlog删除 + 重试
核心流程:
更新数据库
监听binlog删除缓存
缓存删除失败则通过MQ不断重试,直至删除成功
整体流程图如下:
参考如何保障缓存和数据库的一致性(超详细案例)数据库缓存一致性解决方案