# /

# 旁路缓存(Cache Aside Pattern)

旁路缓存基本流程如下:
image.png

# 先改数据库,再删缓存

image.png
这种情况是:
先改数据库,再删缓存。如果删缓存失败,那么数据库中是新数据,缓存中是旧数据,数据不一致。
解决方法:
先删缓存,再改数据库。如果其间缓存服务挂了,数据库未改,则数据一致。

# 先删缓存,再改数据库

image.png
这种情况是:
请求1,先删除缓存,然后将要改数据库,还没改。。
请求2,先查缓存,发现缓存为空,再去查数据库,查到修改前的旧数据,放到了缓存中。
请求1,改数据库完成。
此时,数据库和缓存中的数据不一致。。
解决方法1:
正如上图的场景,缓存中的库存虚高,但是数据库的库存是准的。这其实在业务上并不会出错,是可以容忍的。
解决方法2:
这种场景,是读写并发造成的。只要让读写同步即可解决,比如:读写都上互斥锁、读写通过阻塞队列排序。。

注意:使用任务队列的方式,可能会有出现‘读库存x’‘读库存x’的情况,其中有一次‘改缓存’是多余的。