在线客服
扫描二维码
下载博学谷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持久化机制,尽快恢复缓存集群一旦重启,就能从磁盘上自动加载数据恢复内存中的数据。
以上就是常见三大缓存问题分析及解决方案的全部内容。大家都弄明白了吗?
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
7个优秀的开放式前端面试题
本文为大家整理了7个比较优秀的开放式前端面试题与大家分享。所谓开放式,是没有完全固定的答案,最重要的是答题的思路是否对你未来的面试有所帮助。下面就跟着小编一起学习这7个开放式的前端面试题吧。
17353
2019-08-06 10:20:47
CSS流式布局 知识讲解
CSS的工作方式是浏览器逐行下载样式表,应用其可识别的属性,忽略其不支持的属性。本文将介绍CSS流式布局,分别从html结构、固定布局样式、将固定布局改为流式布局三个方面来阐述,感兴趣的小伙伴可以继续看下去。
7958
2019-08-02 14:12:38
HTML代码怎么用?HTML基础教程
在弄清“HTML代码怎么用”之前,我们要首先明白HTML是用来描述网页的语言,它不是一种编程语言,而是一种 使用标记标签来描述网页的标记语言。本篇基础教程主要内容包括:HTML常用代码、网页基本框架和网页组成要素。
9317
2019-08-16 11:46:05
前端浏览器兼容难题及解决方法
在前端面试题中,最常见的就是遇到浏览器兼容的问题。比如面试题常常会这样问:工作中你都兼容哪些浏览器 ? 实际开发中你都遇到过哪些兼容问题 ?下面小编就来为大家提供前端浏览器兼容难题的解决方法。
8594
2019-09-24 20:26:37
浏览器标准模式和怪异模式是什么?
浏览器标准模式和怪异模式是什么?标准模式浏览器按照HTML与CSS的标准对文档进行解析和渲染;怪异模式浏览器按照旧有的、非标准的实现方式对文档进行解析和渲染。若存在一个完整的DOCTYPE则浏览器将会采用标准模式,如果缺失就会采用怪异模式。
6618
2022-04-15 16:34:34
