数据库和缓存保持一致性问题

  数据库和缓存保持一致性常用的方式有以下四种:
  1、先更新数据库,再更新缓存。
  2、先更新缓存,再更新数据库。
  3、先删除缓存,再更新数据库。
  4、先更新数据库,再删除缓存。【推荐方式】
 
  虽然推荐方式4,但该方式也不是完美的,只是该方式相较于其它三种方式它是最好的。
 
  我们先来看看方式4不完美的地方在哪,假设有读请求A和写请求B,可能会出现如下情况:
  (1)缓存恰好失效。
  (2)请求A缓存不命中,查询数据库获得旧值。
  (3)请求B将新值写入数据库。
  (4)请求B删除缓存。
  (5)请求A将在步骤(2)中获得的旧值写入缓存。
 
  从上面的步骤可以看出,数据库虽然写入了新值,但缓存写入的仍然是旧值,出现了数据库和缓存的数据不一致问题。
 
  出现上述情况有几个必要条件,首先是读请求缓存不命中(主要是引发后续的写入缓存操作),其次是有一个并发的写请求,最后是写数据库比读数据库更快。
 
  同时具备三个条件的概率是比较低的,尤其是第三个条件,由于读数据库远比写数据库快,大多数情况是请求A从数据库读出旧值并完成写入缓存,请求B还没完成写入数据库,结果就是请求A写入的缓存最终被请求B给删除了。

Copyright © 2024 码农人生. All Rights Reserved