最终一致性
给缓存设置过期时间,是保证最终一致性的解决方案。
场景:更新缓存呢,还是删除缓存?
Cache Aside Pattern:
读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。
写的时候,先更新数据库,然后再删除缓存。( lazy 计算)
删缓存失败:
- 缓存设置过期时间(缓存过期时间设为随机值减少发生缓存雪崩的可能性)
- 消息队列重试,有业务代码侵入的问题
- 订阅数据库的binlog
场景:先删除缓存,再更新数据库?
- 高并发下会发生不一致。
- 数据库主从延时会发生不一致。
简单的方法:延时双删策略,第二次删除做成异步的
高并发:更新数据的时候,根据数据的唯一标识,将操作路由之后,发送到一个内存队列中。
读取数据的时候,如果发现数据不在缓存中,那么将重新读取数据+更新缓存的操作,根据唯一标识路由之后,也发送同一个内存队列。
Design Pattern
- Cache Aside Pattern
- Read Through
- Write Through
- Write Back

Read/Write Through是把更新数据库的操作由缓存自己代理了,对于应用层来说,认为后端就是一个单一的存储,而存储自己维护自己的Cache。
网友评论