当前位置:网站首页>[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 在某一个时刻同时失效
边栏推荐
- C语言01、数据类型、变量常量、字符串、转义字符、注释
- 如何在 DataWorks 中 写SQL语句监控数据的变化到达一定的值 进行提示
- 【深度学习】今日bug(8月2)
- C专家编程 第2章 这不是Bug,而是语言特性 2.3 误做之过
- QT QT 】 【 to have developed a good program for packaging into a dynamic library
- 滑环安装注意事项
- leetcode SVM
- 虹科分享 | 如何测试与验证复杂的FPGA设计(3)——硬件测试
- How much do you know about the intelligent operation and maintenance service of data warehouse based on DMS?
- Common distributed theories (CAP, BASE) and consensus protocols (Gosssip, Raft)
猜你喜欢
I am doing open source in Didi
设置海思芯片MMZ内存、OS内存详解
leetcode-693.交替位二进制数
常见分布式理论(CAP、BASE)和一致性协议(Gosssip、Raft)
Detailed ReentrantLock
MATLAB | 七夕节快到了,还不给朋友安排上这个咕呱小青蛙?
元宇宙系列--Value creation in the metaverse
Understand the recommendation system in one article: Outline 02: The link of the recommendation system, from recalling rough sorting, to fine sorting, to rearranging, and finally showing the recommend
C专家编程 第1章 C:穿越时空的迷雾 1.6 它很棒,但它符合标准吗
leetcode SVM
随机推荐
【系统学习编程-编程入门-全民编程 视频教程】
高效的组织信息共享知识库是一种宝贵的资源
MPLS的wpn实验
攻防世界----bug
SwinIR实战:详细记录SwinIR的训练过程
Some optional strategies and usage scenarios for PWA application Service Worker caching
13 and OOM simulation
一文看懂推荐系统:召回02:Swing 模型,和itemCF很相似,区别在于计算相似度的方法不一样
Kubernetes 笔记 / 入门 / 生产环境 / 用部署工具安装 Kubernetes / 用 kubeadm 启动集群 / 安装 kubeadm
smp,numa和mpp体系结构总结
MySQL窗口函数 OVER()函数介绍
DAYU200 OpenHarmony标准系统HDMI全屏显示
Difference and performance comparison between HAL and LL library of STM32
【QT】Qt 给已经开发好的程序快速封装成动态库
如何在 DataWorks 中 写SQL语句监控数据的变化到达一定的值 进行提示
C专家编程 第1章 C:穿越时空的迷雾 1.8 ANSI C标准的结构
QT QT 】 【 to have developed a good program for packaging into a dynamic library
C专家编程 第3章 分析C语言的声明 3.8 理解所有分析过程的代码段
C语言02、语句、函数
How much do you know about the intelligent operation and maintenance service of data warehouse based on DMS?