在线客服
扫描二维码
下载博学谷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持久化机制,尽快恢复缓存集群一旦重启,就能从磁盘上自动加载数据恢复内存中的数据。
以上就是常见三大缓存问题分析及解决方案的全部内容。大家都弄明白了吗?
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
渐进增强与优雅降级之间的不同
在前端开发中,由于浏览器版本不统一,经常遇到低版本浏览器与高版本浏览器的样式无法同步实现的现象。因此渐进增强和优雅降级的概念就应运而生。那到底什么是渐进增强和优雅降级呢?他们之间有什么不同?
6243
2019-07-05 17:35:45
前端模块化相关面试题整理
随着Web2.0时代的到来,使用模块化规范进行管理成为许多人开始考虑的想法。本文为大家整理总结了前端模块化的相关面试题,大家可以借此机会把模块化的相关知识点梳理一遍。了解异步模块加载机制、使用模块化的原模块化的优缺点等等内容。希望本文可以让大家彻底掌握前端模块化的相关面试题!
6219
2020-01-13 09:26:48
前端面试中常见的浏览器相关问题
疫情好转后。迎来一波复工热潮。在这个时候,也是许多小伙伴求职面试的高峰期。因此小编为大家整理了前端面试中常见的浏览器相关问题,众所周知,浏览器的相关问题是前端面试中的基础问题,也是几乎必考的问题。希望大家可以在前端面试前,多刷刷题,准备得更加充分。
4457
2020-03-23 17:47:15
什么是HTTP协议?工作原理是怎样的?
什么是HTTP协议?工作原理是怎样的?HTTP协议全程是超文本传输协议,它的工作原理简单来讲,就是客户端连接到web服务器,然后发送HTTP请求,服务器接受并返回HTTP响应。下面让我们一起来详细了解一下HTTP协议。
5112
2020-07-30 19:33:30
找Java Web培训机构靠谱吗?好不好?
找Java Web培训机构靠谱吗?相比于自学找Java Web培训机构学习效率更高。保证学习效果主要看课程内容和就业薪资。课程内容齐全、符合企业人才需求,学员所学知识与时俱进、就业薪资水平高,满足这两点的培训机构可进入备选区。
3467
2020-08-26 14:58:47