面试时...
- 面试官:你在项目中有用Redis吗?
- 我:有
- 面试官:那你说一下Redis的数据不一致问题怎么解决
- 我:我在项目中,主要是在数据进行修改的时候会删除缓存并且更新数据库,暂时还没出现过数据不一致的情况...
- 面试官:了解,不如我们今天就先到这里?
- 我:好的...
解答方法
我在项目最开始搭建Redis缓存机制的时候,确实是存在缓存与数据库不一致的情况,从整体上看,主要是先修改数据库,然后再删除Redis缓存的
设计思路是这样的
- 当一个修改请求进来之后,我会先去请求修改数据库,当数据库正确修改了之后,才去删除缓存的
- 这样的话虽然其它线程在修改的时候进来会读到脏数据,但是我这边的话最主要是能保证数据的最终一致即可
- 当然这个并非是最好的方案,因为我们在删除Redis缓存的时候可能会存在删除失败的问题,这个当时由于没有集成MQ进来,以及服务器我这边不能随便动,因此就暂时先搁置,现在的方案基本够用了
- 不过我们也是准备了预案
预案的思路是这样的
- 首先我们会引入MQ,让SpringBoot订阅MQ的服务
- 接着我们会在SpringBoot里面添加删除失败的异常捕捉,在捕捉后会通知MQ
- 最后MQ收到通知之后,向SpringBoot发送需要删除Redis的key,然后再进行删除
总结
这是我根据网上总结适合自己的一套说法,欢迎提意见~