数据库和缓存的双写数据一致性问题,是一个和开发语言无关的公共问题。尤其在高并发的场景下,这个问题变得更加严重。
常见方案
通常情况下,我们使用缓存的目的主要是为了提升查询的性能。
但是如果数据库中的某条数据,在放入缓存后又立马被更新了,那该如何更新缓存呢?
目前有4种方案:
- 先写缓存,再写数据库
- 先写数据库,再写缓存
- 先删缓存,再写数据库
- 先写数据库,再删缓存
先写缓存,再写数据库
实际上这种方案不可取。
例如用户在刚写完缓存后,网络出现了异常,导致写数据库失败了。那么缓存这种数据库不存在的”假数据“就没有意义了。
先写数据库,再写缓存
首先它可以避免之前的”假数据“问题,但是他有新的问题。
先删缓存,再写数据库
先写数据库,再删缓存
推荐使用
当然即使是这种方式还是存在着一定的问题,
后续可以采用mq等方式来解决。