在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
一般来讲,常见三大缓存问题不外乎就是缓存穿透、缓存击穿、缓存雪崩。三者的共同点都是高并发,缓存更新、缓存失效居多。而且三者也会相互恶化,导致问题更加严重,因此一旦有一个问题就需要马上解决,以免最引起“雪崩”。本文将分别分析缓存并发、缓存雪崩、缓存击穿三大问题,并提出对应的解决方案。
一、缓存穿透
1、定义:正常情况下,我们去查询数据都是存在。那么请求去查询一条压根儿数据库中根本就不存在的数据,也就是缓存和数据库都查询不到这条数据,但是请求每次都会打到数据库上面去。这种查询不存在数据的现象我们称为缓存穿透。
2、解决方案:
(1)存空值:之所以会发生穿透,就是因为缓存中没有存储这些空数据的key。从而导致每次查询都到数据库去了。那么我们就可以为这些key对应的值设置为null 丢到缓存里面去。后面再出现查询这个key 的请求的时候,直接返回null 。这样,就不用在到数据库中去走一圈了,但是别忘了设置过期时间。
(2)BloomFilter:BloomFilter 类似于一个hbase set 用来判断某个元素(key)是否存在于某个集合中。这种方式在大数据场景应用比较多,比如 Hbase 中使用它去判断数据是否在磁盘上。还有在爬虫场景判断url 是否已经被爬取过。这种方案可以加在第一种方案中,在缓存之前在加一层 BloomFilter ,在查询的时候先去 BloomFilter 去查询 key 是否存在,如果不存在就直接返回,存在再走查缓存 -> 查 DB。
二、缓存击穿
1、定义:缓存击穿是我们可能遇到的第二个使用缓存方案可能遇到的问题。在平常高并发的系统中,大量的请求同时查询一个 key 时,此时这个key正好失效了,就会导致大量的请求都打到数据库上面去。这种现象我们称为缓存击穿。
2、解决方案:上面的现象是多个线程同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个 互斥锁来锁住它。其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存。后面的线程进来发现已经有缓存了,就直接走缓存。
三、缓存雪崩
1、定义:缓存雪崩的情况是说,当某一时刻发生大规模的缓存失效的情况,比如你的缓存服务宕机了,会有大量的请求进来直接打到DB上面。结果就是DB 称不住,挂掉。
2、解决方案:首先,使用集群缓存,保证缓存服务的高可用这种方案就是在发生雪崩前对缓存集群实现高可用,如果是使用 Redis,可以使用 主从+哨兵 ,Redis Cluster 来避免 Redis 全盘崩溃的情况。然后,ehcache本地缓存 + Hystrix限流&降级,避免MySQL被打死使用 ehcache 本地缓存的目的也是考虑在 Redis Cluster 完全不可用的时候,ehcache 本地缓存还能够支撑一阵。使用 Hystrix进行限流 & 降级 ,比如一秒来了5000个请求,我们可以设置假设只能有一秒 2000个请求能通过这个组件,那么其他剩余的 3000 请求就会走限流逻辑。然后去调用我们自己开发的降级组件(降级),比如设置的一些默认值呀之类的。以此来保护最后的 MySQL 不会被大量的请求给打死。最后,开启Redis持久化机制,尽快恢复缓存集群一旦重启,就能从磁盘上自动加载数据恢复内存中的数据。
以上就是常见三大缓存问题分析及解决方案的全部内容。大家都弄明白了吗?
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
经典Web前端面试题分享
很多小伙伴在面试的时候会遇到各种各样的面试题。同样从一个学校出来的大学生,经常在面试的时候面临不同的结局,并不一定是部分同学掌握的知识不够丰富,更多的时候是因为在面试的时候无法系统的解答面试官的问题。所以多参考一下经典的web前端面试题,对未来的就业会有很大的帮助。
8455
2019-06-17 17:32:46
前端模块化相关面试题整理
随着Web2.0时代的到来,使用模块化规范进行管理成为许多人开始考虑的想法。本文为大家整理总结了前端模块化的相关面试题,大家可以借此机会把模块化的相关知识点梳理一遍。了解异步模块加载机制、使用模块化的原模块化的优缺点等等内容。希望本文可以让大家彻底掌握前端模块化的相关面试题!
7387
2020-01-13 09:26:48
什么是前端什么是后端?前端后端区别
前端即网站前台部分,运行在PC端,移动端等浏览器上展现给用户浏览的网页。多数后端开发人员从事于构建工作应用程序背后的实际逻辑。前后端需要相互配合,共同完成一个项目。前端的工作内容就是将美工设计的效果图的设计成浏览器可以运行的网页;后端考虑的是底层业务逻辑的实现,平台的稳定性与性能等。
9577
2020-01-17 14:28:49
前端学习中的重点难点总结
在互联网技术岗位中,前端一直被定义为入门简单,发展潜力巨大的技术方向。尤其对于新接触编程的同学们而言,非常容易理解并掌握HTML和CSS的基本知识,但是作为一门技术岗位,前端开发依旧具有一定的挑战性。因此我们一定要注意前端学习中的重点难点知识,在学习的过程中尽量掌握其要点,保障在实际工作中减少踩雷的风险。
6666
2020-08-07 10:27:04
北京前端培训班哪家好?怎么选?
北京前端培训班哪家好?对于学生而言最重要的是技术知识,如何学会,如何把学到的技术运用到项目中去,如何在培训期间实操更多的实战项目,这些硬技能才能成为培训完以后面试时的核心竞争力,选择北京前端培训班时一定要重点考察课程更新、项目实战、师资力量这三个方面。
3710
2021-03-26 14:52:05