Toc
  1. 数据查询
  2. 数据更新
    1. Cache Aside Pattern
      1. 先删除缓存再更新数据
      2. 先更新数据再删除缓存
    2. 缓存延时双删
Toc
0 results found
BOBO
缓存和数据库双写不一致
2022/05/15 系统设计

数据查询

先查询缓存,命中即返回,未命中则查询数据库,然后更新缓存数据。

数据更新

两个大方案,Cache Aside Pattern 和 缓存延时双删

Cache Aside Pattern

先删除缓存再更新数据

可以避免缓存删除失败后,缓存和数据库数据不一致的问题。
问题:当删除缓存后,数据还未更新成功的时间窗口内,如果发生数据查询,则缓存内的数据都为老数据。

先更新数据再删除缓存

facebook 就是这种方式,可以避免更新数据的时间窗口内,数据查询不是最新数据的问题。
问题:当删除缓存失败时,缓存内的数据将在下一次数据更新前都是老数据。

缓存延时双删

更新数据库后删除缓存,然后隔一段时间异步再次删除缓存。
可以通过消息队列订阅 MySql 的 binlog 日志(现成的中间件 canal),也可以通过程序启动异步线程去执行删除。
问题:当缓存删除失败后,会出现短时间的不一致,不一致的时间窗口为延时删除的延迟时间。

支付宝
微信
Simple is Awesome