数据库和缓存的双写数据一致性问题,是一个和开发语言无关的公共问题。尤其在高并发的场景下,这个问题变得更加严重。


常见方案

通常情况下,我们使用缓存的目的主要是为了提升查询的性能。

image-20220826232725235

但是如果数据库中的某条数据,在放入缓存后又立马被更新了,那该如何更新缓存呢?

目前有4种方案:

  1. 先写缓存,再写数据库
  2. 先写数据库,再写缓存
  3. 先删缓存,再写数据库
  4. 先写数据库,再删缓存

先写缓存,再写数据库

实际上这种方案不可取。

例如用户在刚写完缓存后,网络出现了异常,导致写数据库失败了。那么缓存这种数据库不存在的”假数据“就没有意义了。

先写数据库,再写缓存

首先它可以避免之前的”假数据“问题,但是他有新的问题。

先删缓存,再写数据库

先写数据库,再删缓存

推荐使用

当然即使是这种方式还是存在着一定的问题,

后续可以采用mq等方式来解决。