概述
随着时代的发展,服务系统架构也已经由最初的单体架构转变为分布式、微服务架构模式。 从数据体量上来看,各系统存储的数据量越来越大,数据的查询性能越来越低。 此时,就需要我们不断的进行优化,最常用的就是引入缓存。 而引入缓存后,我们如何保证缓存和数据库的一致性呢?
常见策略模式
常见更新策略有Cache Aside (旁路缓存)、Read/Write Through (读穿 / 写穿)、Write Behind/Back(写回)三种模式, 其中旁路缓存是目前应用最广泛的一种方式。
Cache Aside (旁路缓存)
- 失效:应用程序先从cache取数据,没有获取到,则从数据库中取数据,成功后,放到缓存中。
- 命中:应用程序从cache中取数据,取到后返回。
- 更新:先把数据存到数据库中,成功后,再让当前缓存失效
是不是Cache Aside这个就不会有并发问题了?
不是的,比如,一个是读操作,但是没有命中缓存,然后就到数据库中取数据,此时来了一个写操作,写完数据库后,让缓存失效, 然后,之前的那个读操作再把老的数据放进去,所以,会造成脏数据。
为什么这种思路存在这么明显的问题,却还具有