当前位置:网站首页>[redis] cache penetration and cache avalanche and cache breakdown solutions
[redis] cache penetration and cache avalanche and cache breakdown solutions
2022-08-03 16:38:00 【Arnold Warzenegger of Java】
本文已参与「新人创作礼」活动,一起开启掘金创作之路.
目录
一、什么是缓存穿透?
概念: 在一般情况下,用户请求数据,会先从redis中查找,If the data requested by the user is not found,The search starts from the database,There is little general data,是没有问题的,If the data is very large,The database will crash.
缓存穿透: 缓存穿透是指查询一个一定不存在的数据,Because this data does not exist,So it will never be cached,所以每次请求都会去请求数据库.
编辑
解决方案:
1、缓存空结果
如果系统发现 Redis 及 DB 中都不存在该资源,就缓存空结果一段时间.需要注意哈,这次的失效时间不能设置的太长,否则数据的实效性会产生很大的问题.
2、User legitimacy verification
对用户的请求合法性进行校验,拦截恶意重复请求
3、布隆过滤器
看到这个名词不要慌.简单来说布隆过滤器的用途就是帮助你判断某个值是否存在.
举个例子来看下:假设我们现在有一个长度为 9 的 bit 数组,该数组的每个位置上只能保存 1 或者 0,1 标识该位置被占用,0 标识该位置未被使用.
- 对于 key1,我们借助三个 Hash 函数分别对其哈希运算
- 再将得到的这三个哈希值对 9 求模.
- 最后将这三个模值落入到 bit 数组上.
- key2、key3 按照同样的方式再处理一遍.
编辑
最后,我们会发现这个 bit 数组里只有位置 3 还是空着的.如果此时来了一个新的 key4 通过三个Hash算法求出的哈希值为 1、2、3,我们则可以断定 key4 一定不存在
编辑
布隆过滤器的原理还是比较简单的.这里我们需要注意,布隆过滤器可能存在一定误判的可能性,但它依然可以帮助你拦截掉大部分一定不存在的数据.
二、什么是缓存击穿?
概念: 举个极端的例子:比如某某明星爆出一个惊天狠料,海量吃瓜群众同时访问微博去查看该八卦新闻,而微博 Redis 集群中数据在此刻正好过期了,那么无数的请求则直接打到了微博系统的物理 DB 上,DB瞬间挂了.
缓存击穿: 如果你的应用中有一些访问量很高的热点数据,我们一般会将其放在缓存中以提高访问速度.另外,为了保持时效性,我们通常还会设置一个过期时间.但是对于这些访问量很高的KEY,我们需要考虑一个问题:当热点KEY在失效的瞬间,海量的请求会不会产生大量的数据库请求,从而导致数据库崩溃?
解决方案:
1、热点数据永不过期
比如我们可以将某个 key 的缓存时间设置为 25 小时,然后后台有个 JOB 每隔 24 小时就去批量刷新一下热点数据.就可以解决这个问题了
2、使用互斥锁
容易影响吞吐量,大部分项目设置热点 key 永不过期就妥妥的了
三、什么是缓存雪崩?
概念: 这里的 Redis 崩了指的并不是 Redis 集群宕机了.而是说在某个时刻 Redis 集群中的热点 key 都失效了.如果集群中的热点 key 在某一时刻同时失效了的话,试想海量的请求都将直接打到 DB 上,DB 可能在瞬间就被打爆了.
缓存雪崩: 是指在我们设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到数据库,最终导致数据库瞬时压力过大而崩溃.
解决方案
1、redis Add a random number to the expiration time
Redis 失效时间加上随机数,是一种比较取巧的解决方案.在一定程度上减轻了 DB 的瞬时压力,但是这种方案也在一定程度上增加了维护的成本.
2、redis 永不过期
实现方案在上文中简单提过了
总结
如何轻松的通过联想的方式来区分 Redis 缓存穿透、击穿、雪崩的区别
- 缓存穿透---穿过(绕过) Redis 和 DB 来搞你
- 缓存击穿---定点打击来搞你
- 缓存雪崩---热点 key 在某一个时刻同时失效
边栏推荐
猜你喜欢
随机推荐
不可忽略!户外LED显示屏的特点及优势
甲方不让用开源【监控软件】?大不了我自己写一个
Kubernetes 笔记 / 生产环境
How much do you know about the intelligent operation and maintenance service of data warehouse based on DMS?
window.open does not show favicon.icon
Leetcode76. Minimal Covering Substring
mysql delete execution error: You can't specify target table 'doctor_info' for update in FROM clause
Difference and performance comparison between HAL and LL library of STM32
使用.NET简单实现一个Redis的高性能克隆版(一)
如何设计大电流九线导电滑环
使用 PowerShell 将 Windows 转发事件导入 SQL Server
附录A 程序员工作面试的秘密
TCP 可靠吗?为什么?
Yuan xiaolin: Volvo focus on travel security, and put it perfectly
2021年数据泄露成本报告解读
To participate in sweepstakes, incoming new programmers magazine welfare!
C专家编程 第2章 这不是Bug,而是语言特性 2.3 误做之过
C专家编程 第2章 这不是Bug,而是语言特性 2.4 少做之过
window.open不显示favicon.icon
正向代理与反向代理









