高频面试题-如何避免Redis中缓存穿透缓存雪崩问题?
Posted javatiange
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高频面试题-如何避免Redis中缓存穿透缓存雪崩问题?相关的知识,希望对你有一定的参考价值。
Redis,因为其速度快等各方面的原因,被开发人员一直应用于企业级开发。
而一旦开始使用Redis,就必然要考虑的问题就当属缓存穿透、缓存雪崩的问题了,这也是面试过程中很容易问到的点了,下面我们就来聊一下这些吧。
1. 什么是缓存穿透?
缓存穿透是指当查询一个不存在的数据,由于无法命中对应的值,就会一直需要去数据库中查询;所以这个时候Redis并没有起到减少查询的次数,失去了使用Redis的初心,反而性能方面有了更大的消耗,就会造成整体的性能下降。
2. 如何解决缓存穿透问题?
一句话答案:给没有命中的key值设置‘空值’。
虽然无法命中对应的值,但是我们依然要给对应的key设置空值。
这样,我们就又可以降低直接访问数据库的次数,从而一定程度上提高了系统性能。
如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧!
[Java架构群]
群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的JAVA交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。
3. 什么是缓存雪崩?
雪崩时,没有一片雪花是无辜的。
缓存雪崩是指当一批缓存数据均设置了相同的过期时间时,会导致一批缓存数据同一时间失效,届时就会存在大批的请求同时去访问数据库,会造成数据库的瞬时压力过大,造成雪崩。
4. 如何解决缓存雪崩问题?
一句话答案:给缓存数据的key设置不同的过期时间
缓存雪崩问题就是同一时间缓存过期问题,所以只需要给缓存数据设置不同的过期时间即可。
由于系统内部业务的限制,可以在某一个区间内取随机值,如:30分钟-60分钟之间的任意值;这样即便会存在相同过期时间,也不会很多。
当然了,如果你系统业务缓存量级比较大,加大区间就可以了。
最后
给大家分享一篇一线开发大牛整理的java高并发核心编程神仙文档,里面主要包含的知识点有:多线程、线程池、内置锁、JMM、CAS、JUC、高并发设计模式、Java异步回调、CompletableFuture类等。
码字不易,如果觉得本篇文章对你有用的话,请给我一键三连!关注作者,后续会有更多的干货分享,请持续关注!
以上是关于高频面试题-如何避免Redis中缓存穿透缓存雪崩问题?的主要内容,如果未能解决你的问题,请参考以下文章