本文主要讨论这么几个问题:

(1)数据库主从延时为何会导致缓存数据不一致

(2)优化思路与方案

一、需求缘起

上一篇《缓存架构设计细节二三事》中有一个小优化点,在只有主库时,通过“串行化”的思路可以解决缓存与数据库中数据不一致。引发大家热烈讨论的点是“在主从同步,读写分离的数据库架构下,有可能出现脏数据入缓存的情况,此时串行化方案不再适用了”,这就是本文要讨论的主题。

二、为什么数据会不一致

为什么会读到脏数据,有这么几种情况:

(1)单库情况下,服务层的并发读写,缓存与数据库的操作交叉进行
image.png

虽然只有一个DB,在上述诡异异常时序下,也可能脏数据入缓存:

1)请求A发起一个写操作,第一步淘汰了cache,然后这个请求因为各种原因在服务层卡住了(进行大量的业务逻辑计算,例如计算了1秒钟),如上图步骤1

2)请求B发起一个读操作,读cache,cache

收藏 打印