Redis数据一致性

概述

  • 当前修改或者保存,删除数据库数据之后,Redis中的数据也应该进行相应的变化。不然再次查询可能查询出已经删除的脏数据
  • 无论是先写到缓存还是先写到数据库,这两部操作不能保证原子性,所以会出现数据不一致性问题
  • 先删除缓存,在修改数据库,如果修改失败了,数据库中依旧是旧数据,缓存中是空的,读的时候缓存中没有,数据库中有,更新到缓存中。数据发生了变更,先删除缓存,然后要去修改数据库,此时,另一个线程请求进来,去读缓存,发现缓存空了,去查数据库,发现了旧数据,更新到缓存中,随后数据库变更操作完成了更新,这样数据库和缓存就不一致了

如何解决

  • 延时双删:先淘汰缓存,在写数据库,休眠一秒再次淘汰缓存
  1. 线程A删除缓存
  2. 线程B查询缓存发现为空
  3. 线程B查询DB并写入缓存
  4. 线程A更新数据库
  5. 延时一秒线程A在删除缓存
  • 串行化
posted @ 2020-06-15 10:19  JXY_Super  阅读(515)  评论(0编辑  收藏  举报