What
一致性是指数据库和缓存里的数据是一样的,如果出现两者不一样,就说出现了一致性问题。
一致性优化是指怎么消除一致性问题,或者出现了一致性问题怎么去发现并解决。
Why
如果数据库和缓存不一致,会导致系统出现BUG,尤其是一些关键性的数据,比如余额。所以在一些不能容忍不一致的场景,是一定要消除不一致的问题。
为什么会出现数据不一致?
-
数据库主从不一致导致的数据库缓存不一致。
-
淘汰缓存失败导致的数据库缓存不一致。
参考《缓存设计 - 互联网最佳实践Cache Aside Pattern》中章节Drawback
How
针对主从不一致导致的数据库缓存不一致,有三个方案:
方案一:选择性读主:参考《数据库设计 - 主从一致性》中章节选择性读主
方案二:二次淘汰法(异步,服务)
- 异步的方式比如做一个小工具(比如DTS、Canal)可以订阅和分析binlog,再次异步淘汰缓存。最坏的情况是缓存里的脏数据持续时长等于主从同步延时的时间
- 服务里也可以进行二次淘汰,第一步del缓存的同事,可以开启一个timer,触发1秒后的再次淘汰缓存。
方案三:为允许cache miss的场景,设定超时时间,有机会修正(最终一致)
Refer
- https://www.jianshu.com/p/3613d55fb843