缓存设计 - 一致性优化

What

一致性是指数据库和缓存里的数据是一样的,如果出现两者不一样,就说出现了一致性问题。

一致性优化是指怎么消除一致性问题,或者出现了一致性问题怎么去发现并解决。

Why

如果数据库和缓存不一致,会导致系统出现BUG,尤其是一些关键性的数据,比如余额。所以在一些不能容忍不一致的场景,是一定要消除不一致的问题。

为什么会出现数据不一致?

  1. 数据库主从不一致导致的数据库缓存不一致。
    在这里插入图片描述

  2. 淘汰缓存失败导致的数据库缓存不一致。
    参考《缓存设计 - 互联网最佳实践Cache Aside Pattern》中章节Drawback

How

针对主从不一致导致的数据库缓存不一致,有三个方案:

方案一:选择性读主:参考《数据库设计 - 主从一致性》中章节选择性读主

方案二:二次淘汰法(异步,服务)
在这里插入图片描述

  1. 异步的方式比如做一个小工具(比如DTS、Canal)可以订阅和分析binlog,再次异步淘汰缓存。最坏的情况是缓存里的脏数据持续时长等于主从同步延时的时间
  2. 服务里也可以进行二次淘汰,第一步del缓存的同事,可以开启一个timer,触发1秒后的再次淘汰缓存。

方案三:为允许cache miss的场景,设定超时时间,有机会修正(最终一致)

Refer

  1. https://www.jianshu.com/p/3613d55fb843

猜你喜欢

转载自blog.csdn.net/hudmhacker/article/details/108404435