缓存设计模式
2020-09-28 本文已影响0人
AD刘涛
Cache Aside Pattern
这是最常用的设计模式了,其具体逻辑如下。
- 失效:应用程序先从
Cache
取数据,如果没有得到,则从数据库中取数据,成功后,则存储到缓存中。 - 命中:应用程序从
Cache
中取数据,取到后返回。 - 更新:先把数据存到数据库中,成功后,在让缓存失效。
为什么要先把数据存储到数据库中后才让缓存失效呢?
在日常开发中,我们常常会见到这样的操作,先让缓存失效,其次更新数据库
。这样的操作存在什么问题呢?
我们先假设一下,此时存在着2个并发操作:
- 线程1是 ==> 更新操作
- 线程2是 ==> 查询操作
线程1删除缓存后,正好赶上线程2的查询操作。由于线程2没有命中缓存,此时线程2会去数据库查询,此时此刻的数据库依旧存储的是老数据。当线程2拿到该数据时会进行缓存。当这些操作都完成后,线程1才开始更新操作。于是就出现了缓存中的数据依旧是之前的老数据,从而导致存储更新不及时,存在脏数据的情况。
当然了,Cache Aside Pattern
依旧存在并发问题,但在现实环境中,这样的情况不容易发生。具体信息可参考链接。