缓存更新的几种方法

favouriter 2020-04-21

最近做项目遇到了与缓存有关的问题,缓存的更新是一个值得深入研究的操作。

看了网上好多的思路,往往都是先删除缓存,再去从数据库读取,这样的结果很有可能会导致数据不一致,查了一些资料,找到了“耗子叔”的文章,阐述了缓存更新的几种方法

Cache Aside

  • 失效:应用程序先从cache中取数据,没取到就去数据库中找,成功后放入缓存
  • 命中:从cache中直接返回
  • 更新:先把更新数据库,成功后,再让缓存失效

Read/Write Through Pattern

我们可以看到,在上面的Cache Aside套路中,我们的应用代码需要维护两个数据存储,一个是缓存(Cache),一个是数据库(Repository)。所以,应用程序比较啰嗦。而Read/Write Through套路是把更新数据库(Repository)的操作由缓存自己代理了,所以,对于应用层来说,就简单很多了。可以理解为,应用认为后端就是一个单一的存储,而存储自己维护自己的Cache。

Read Through

Read Through 套路就是在查询操作中更新缓存,也就是说,当缓存失效的时候(过期或LRU换出),Cache Aside是由调用方负责把数据加载入缓存,而Read Through则用缓存服务自己来加载,从而对应用方是透明的。

Write Through

Write Through 套路和Read Through相仿,不过是在更新数据时发生。当有数据更新的时候,如果没有命中缓存,直接更新数据库,然后返回。如果命中了缓存,则更新缓存,然后再由Cache自己更新数据库(这是一个同步操作)

Write Behind Caching Pattern

这个不是太了解,可以参考耗子叔文章

参考文章:https://coolshell.cn/articles/17416.html

相关推荐