Java面试题目记录——如何解决Redis与数据库不一致的问题

71 阅读2分钟

面试时...

  • 面试官:你在项目中有用Redis吗?
  • 我:有
  • 面试官:那你说一下Redis的数据不一致问题怎么解决
  • 我:我在项目中,主要是在数据进行修改的时候会删除缓存并且更新数据库,暂时还没出现过数据不一致的情况...
  • 面试官:了解,不如我们今天就先到这里?
  • 我:好的...

解答方法

我在项目最开始搭建Redis缓存机制的时候,确实是存在缓存与数据库不一致的情况,从整体上看,主要是先修改数据库,然后再删除Redis缓存的

设计思路是这样的

  • 当一个修改请求进来之后,我会先去请求修改数据库,当数据库正确修改了之后,才去删除缓存的
  • 这样的话虽然其它线程在修改的时候进来会读到脏数据,但是我这边的话最主要是能保证数据的最终一致即可
  • 当然这个并非是最好的方案,因为我们在删除Redis缓存的时候可能会存在删除失败的问题,这个当时由于没有集成MQ进来,以及服务器我这边不能随便动,因此就暂时先搁置,现在的方案基本够用了
  • 不过我们也是准备了预案

e5c46964a70dca922d11d6adfa190f8.png

预案的思路是这样的

  • 首先我们会引入MQ,让SpringBoot订阅MQ的服务
  • 接着我们会在SpringBoot里面添加删除失败的异常捕捉,在捕捉后会通知MQ
  • 最后MQ收到通知之后,向SpringBoot发送需要删除Redis的key,然后再进行删除

6b34b105985cf5d9d699ba76d5dc371.png

总结

这是我根据网上总结适合自己的一套说法,欢迎提意见~