缓存一致性问题

176 阅读1分钟

更新缓存还是删除缓存?

我们先来看更新缓存

一、先更新缓存再更新数据库

二,先更新数据库再更新缓存

原理相同

那如果删除缓存呢?

一、先删除缓存,在更新数据库

线程1:第一步①删除缓存key的值,第二步②更新数据库值为A1

线程2:第一步①查询缓存key的值,没命中。第二步②从数据库中读取,③第三步写入缓存A

同理线程1和线程2并不是串行的,如果此时线程1还没来得及时更新数据库,那么线程2 读取的还是老数据,因为没命中所以还会把老数据写入缓存。那么数据库和缓存数据就不一致了。这个不一致的时间窗口取决于缓存过期时间或下一次删除缓存的时间。

二、先更新数据库,再删除缓存

综上所述

    归根结底是多线程并发问题,对于分布式环境下,线程2的操作并不能保证在线程1操作完成之后在操作,操作数据库和操作缓存不是一个原子操作