如何保证数据库与缓存数据一致性?( 二 )


文章插图
 
流程说明:

  • 线程1写入数据库成功,由于网络卡顿原因,导致删除缓存数据失败
  • 线程2读取数据,读取为缓存中的数据,但是当网络恢复正常后,缓存中的数据会被删除,所以可能会存在短暂的数据不一致 。
虽然存在短暂的数据不一致,但是在旁路缓存策略的时候,对于写的操作:先更新数据库,再删除缓存 。
数据库和缓存一致性解决方案缓存延迟双删缓存延迟双删针对第三种场景的优化,具体的流程如下:
如何保证数据库与缓存数据一致性?

文章插图
 
说明:先删除缓存,在更新数据库,确保数据库事务提交成功,然后休眠一段时间在删除缓存 。我们都知道第三种情况是因为网络卡顿导致数据库更新失败,当网络恢复正常后,我们在执行更新数据库操作,然后再删除缓存,那么出现数据不一致的情况也就是在休眠的这短暂的时间内 。
删除缓存失败如何处理删除缓存重试机制
如何保证数据库与缓存数据一致性?

文章插图
 
需要删除失败的key存入消息队列中,采用异步的方式来进行删除,如果删除失败的次数已经超过了最大次数,发送警告邮件,需要人工介入解决 。
总结本文对于数据库和缓存的一致性进行详细的讲解,由于数据库和缓存一致性的场景比较复杂,每种方案都无法保证绝对的一致性,根据CAP理论我们知道缓存系统使用场景为非强一致性的场景,符合CAP中的AP,如有疑问请及时反馈 。
作者:剑圣无痕
链接:
https://juejin.cn/post/7126188464713760776




推荐阅读