Redis缓存穿透、击穿与雪崩及对应的解决办法

文章目录

  • Redis缓存穿透、击穿和雪崩
    • 一. 缓存穿透
    • 二. 缓存击穿
    • 三. 缓存雪崩

Redis缓存穿透、击穿和雪崩


图中的上半部分可理解为缓存雪崩,下半部分可理解为缓存穿透,接下来一起学习

在这里插入图片描述


一. 缓存穿透

概念

简而言之:数据查不到

用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透。

解决方案

1. 布隆过滤器:是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃,从而避免了对底层存储系统的查询压力;

2. 缓存空对象:当存储层不命中后,即使返回的空对象也将其缓存起来,同时会设置一个过期时间,之后再访问这个数据将会从缓存中获取,保护了后端数据源﹔

缓存空对象可能存在的问题:- 如果空值能够被缓存起来,这就意味着缓存需要更多的空间存储更多的键(对应的值为空),浪费资源- 即使对空值设置了过期时间,还是会存在缓存层和存储层的数据会有一段时间窗口的不一致,这对于需要保持一致性的业务会有影响

二. 缓存击穿

概念

简而言之:对一个数据的访问太大,缓存过期

指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问。当这个key在失效的瞬间,持续的大并发就穿破缓存,直接同时请求数据库,会导使数据库瞬间压力过大。

解决方案

1. 设置热点数据永不过期:从缓存层面来看,没有设置过期时间,所以不会出现热点key过期

2. 加互斥锁:使用分布式锁,保证对于每个key同时只有一个线程去查询后端服务,其他线程没有获得分布式锁的权限,因此只需要等待即可。这种方式将高并发的压力转移到了分布式锁,因此对分布式锁的考验很大。


三. 缓存雪崩

概念

在某一个时间段,缓存集中过期失效。如停电导致的Redis集群宕机

解决方案

1. redis高可用:多增设几台redis,其实就是搭建的集群,分别放在不同的地方

2. 限流降级:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。

3. 数据预热:在正式部署之前,把可能的数据先预先访问一遍,这样部分可能大量访问的数据就会加载到缓存中。在即将发生大并发访问前手动触发加载缓存不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/295521.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何优化TCP?TCP的可靠传输机制是什么?

在网络世界中,传输层协议扮演着至关重要的角色,特别是TCP协议,以其可靠的数据传输特性而广受青睐。然而,随着网络的发展和数据量的激增,传统的TCP协议在效率方面遭遇了挑战。小编将深入分析TCP的可靠性传输机制&#x…

“由于找不到opencv_world3413.dll,无法继续执行代码”的解决方法

问题 在Windows系统中,编译完涉及到opencv的项目后,提示, 由于找不到opencv_world3413.dll,无法继续执行代码 解决方法 在编译好的opencv的bin文件内(如:D:\code\vs2017\opencv\build\x64\vc15\bin&…

HTMLCSS

前端入门 1、HTML&CSS 1、选择器 通配选择器 元素选择器 类选择器 id选择器 复合(组合) 选择器 交集选择器(且) <style> p.class {... } /* 元素选择器需在前面 */.class1.class2 {... } </style>并集选择器(或者) <style> .class1, .class2, …

Kaggle:收入分类

先看一下数据的统计信息 import pandas as pd # 加载数据&#xff08;保留原路径&#xff0c;但在实际应用中建议使用相对路径或环境变量&#xff09; data pd.read_csv(r"C:\Users\11794\Desktop\收入分类\training.csv", encodingutf-8, encoding_errorsrepl…

STM32 uC/OS-III

What is uC/OS-III? C/OS-III 的发音为“Micro C O S Three”&#xff0c;这意味着 C/OS-III 是基于 C 语言编写的第三代 小型操作系统&#xff0c;当然这里所说的第三代是相对于 C/OS 的前两个版本 C/OS 和 C/OS-II 而言 的&#xff0c;后面也会介绍这三个版本的差别。C/OS/…

基于Springboot旅游网站管理系统设计和实现

基于Springboot旅游网站管理系统设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系…

突破数据障碍—如何使用IP代理服务获取量子科学研究领域最新数据

写在前面 在这个数字化的时代&#xff0c;人们越来越关注隐私保护和网络访问自由。我最近也深入研究了一下IP代理服务&#xff0c;在规避地理限制、绕过封锁以及保护个人隐私方面&#xff0c;它确实发挥了关键作用。 一、基础介绍 起因是有个项目需要对量子领域进行深入的研究之…

手写红黑树【数据结构】

手写红黑树【数据结构】 前言版权推荐手写红黑树一、理论知识红黑树的特征增加删除 二、手写代码初始-树结点初始-红黑树初始-遍历初始-判断红黑树是否有效查找增加-1.父为黑&#xff0c;直接插入增加-2. 父叔为红&#xff0c;颜色调换增加-3. 父红叔黑&#xff0c;颜色调换&am…

Java | Leetcode Java题解之第6题Z字形变换

题目&#xff1a; 题解&#xff1a; class Solution {public String convert(String s, int numRows) {int n s.length(), r numRows;if (r 1 || r > n) {return s;}int t r * 2 - 2;int c (n t - 1) / t * (r - 1);char[][] mat new char[r][c];for (int i 0, x …

【HTML】制作一个简单的动态SVG图形

目录 前言 开始 HTML部分 CSS部分 效果图 总结 前言 无需多言&#xff0c;本文将详细介绍一段HTML和CSS代码&#xff0c;该代码用于创建一个动态的SVG图形&#xff0c;具体内容如下&#xff1a; 开始 首先新建文件夹&#xff0c;创建两个文本文档&#xff0c;其中HTML的文…

加密、签名、验签、证书、对称加密、非对称加密【部分知识点】

文章目录 前言如图一些概念区分不可逆加密可逆加密签名和验签 前言 总结一些涉及到OTA升级相关的数据加密知识点&#xff0c;仅作为笔记记录&#xff0c;仅部分总结&#xff0c;细节部分可以私聊我。 如图 一些概念区分 不可逆加密 哈希算法是一个统称&#xff0c;它分为MD…

基于yolov9来训练人脸检测

YOLOv9是一个在目标检测领域内具有突破性进展的深度学习模型&#xff0c;尤其以其在实时性与准确性上的优秀表现而受到广泛关注。针对人脸检测这一特定任务&#xff0c;YOLOv9通过其架构创新和算法优化提供了强大的支持。 YOLOv9在继承了YOLO系列&#xff08;如YOLOv7、YOLOv8&…

OCP Java17 SE Developers 复习题11

答案 A, C, D, E. A method that declares an exception isnt required to throw one, making option A correct. Unchecked exceptions can be thrown in any method, making options C and E correct. Option D matches the exception type declared, so its also correct…

一文读懂匈奴历史

匈奴&#xff0c;一个曾经叱咤风云的游牧民族&#xff0c;在中国历史上留下了浓墨重彩的一笔。他们的崛起和衰落&#xff0c;不仅影响了中原王朝的兴衰更迭&#xff0c;也深刻地改变了中国北方的民族构成和文化面貌。 1、匈奴的起源 根据司马迁的《史记》记载&#xff0c;匈奴…

[C++]使用OpenCV去除面积较小的连通域

这是后期补充的部分&#xff0c;和前期的代码不太一样 效果图 源代码 //测试 void CCutImageVS2013Dlg::OnBnClickedTestButton1() {vector<vector<Point> > contours; //轮廓数组vector<Point2d> centers; //轮廓质心坐标 vector<vector<Point&…

基于vscode Arduino插件开发Arduino项目

基于vscode Arduino插件开发arduino项目 问题1. 指定编译输出文件夹2. 编译下载时不输出详细信息输出端口信息乱码 环境&#xff1a;Arduino插件版本为v0.6.0 记得之前使用vscode 开发arduino时只需要将Arduino IDE的路径添加到设置里面就可以了&#xff0c;今天在安装好插件后…

从零开始为香橙派orangepi zero 3移植主线linux——2.linux kernel

从零开始为香橙派orangepi zero 3移植主线linux——2.linux kernel 0.环境搭建补档NFS服务TFTP服务 一、linux kernel编译二、运行 0.环境搭建补档 linux kernel验证时&#xff0c;使用tftp服务从ubuntu主机下载启动更加方便&#xff0c;等到验证无误后再一次性烧写到tf卡。所以…

隐私计算实训营第七讲-隐语SCQL的架构详细拆解

隐私计算实训营第七讲-隐语SCQL的架构详细拆解 文章目录 隐私计算实训营第七讲-隐语SCQL的架构详细拆解1.SCQL Overview1.1 多方数据分析场景1.2 多方数据分析技术路线1.2.1 TEE SQL方案1.2.2 MPC SQL方案 1.3 Secure Collaborative Query Language(SCQL)1.3.1 SCQL 系统组件1.…

黄金票据攻击

黄金票据攻击——域内横向移动技术 一、黄金票据攻击介绍&#xff1a; 黄金票据攻击是一种滥用Kerberos身份认证协议的攻击方式&#xff0c;它允许攻击者伪造域控krbtgt用户的TGT&#xff08;Ticket-Granting Ticket&#xff09;。通过这种方法&#xff0c;攻击者可以生成有效…

FMECA应该如何开展——FMEA软件

免费试用FMEA软件-免费版-SunFMEA FMECA&#xff0c;全称为故障模式、影响及危害性分析&#xff08;Failure Modes, Effects, and Criticality Analysis&#xff09;&#xff0c;是一种在工程和可靠性领域广泛应用的分析方法。它的主要目的是识别产品、系统或过程中潜在的故障…