面试前必须要知道的Redis面试
一般我们都是采取删除缓存缓存策略的,原因如下:
基于这两点,对于缓存在更新时而言,都是建议执行删除操作! 3.3.2先更新数据库,再删除缓存正常的情况是这样的:
如果原子性被破坏了:
如果在高并发的场景下,出现数据库与缓存数据不一致的概率特别低,也不是没有:
要达成上述情况,还是说一句概率特别低: 因为这个条件需要发生在读缓存时缓存失效,而且并发着有一个写操作。而实际上数据库的写操作会比读操作慢得多,而且还要锁表,而读操作必需在写操作前进入数据库操作,而又要晚于写操作更新缓存,所有的这些条件都具备的概率基本并不大。 对于这种策略,其实是一种设计模式:Cache Aside Pattern 先修改数据库,再删除缓存 删除缓存失败的解决思路:
3.3.3先删除缓存,再更新数据库正常情况是这样的:
如果原子性被破坏了:
看起来是很美好,但是我们在并发场景下分析一下,就知道还是有问题的了:
所以也会导致数据库和缓存不一致的问题。 并发下解决数据库与缓存不一致的思路:
![]() 将操作积压到队列中 3.4对比两种策略 我们可以发现,两种策略各自有优缺点:
3.5 其他保障数据一致的方案与资料 可以用databus或者阿里的canal监听binlog进行更新。 参考资料:
https://coolshell.cn/articles/17416.html
https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/redis-consistence.md
https://zhuanlan.zhihu.com/p/48334686
https://blog.csdn.net/z50l2o08e2u4aftor9a/article/details/81008933 最后这是几道Redis常见的面试题,希望大家看完有所帮助,顺利拿到offer! 【编辑推荐】
点赞 0 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |