关于redis缓存策略的一个疑惑

以下这个是比较标准的redis缓存策略:
1.读:应用程序先从cache取数据,没有得到,则从数据库中取数据,成功后,放到缓存中。
2.读:应用程序从cache中取数据,取到后返回。
3.增删改:先把数据存到数据库中,成功后,再让缓存失效。

我现在对第三点感到疑惑,为什么更新完DB,然后去让缓存失效,而不是直接去更新缓存。我知道让缓存失效后,再去查的时候会命中不了缓存然后去读DB,然后再去更新缓存。那为什么不是在刚刚更新DB的时候就把缓存更新掉呢?

而且,万一有些场景,查数据的地方,只会去redis查,redis没有也不会去db里面查,针对这个情况,上面的第三条策略就不行了吧

阅读 3.5k
3 个回答

保证了数据库更新成功在去更新缓存。如果刚刚更新DB的时候就把缓存更新掉,那么数据库更新失败,就会导致数据不一致。出现垃圾数据

直接把12封装成接口,不就可以给多端调用了。保持数据的统一。

新手上路,请多包涵

两个线程AB A先读的数据库1,B读数据库2, 然后更新的时候B先更新为2,之后1也去更新了,这样就成了脏数据了

如果按照你的想法 如果他本身只支持redis查询 而跟DB没有关系 大可以直接更新缓存 之后在异步更新DB 这样即使DB更新失败 跟业务也没关联 你还可以继续更新直到他成功

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题