Redis的缓存雪崩,击穿,穿透的介绍

1.缓存雪崩

为保证缓存中的数据与数据库的数据一致,会给Redis里的数据设置一个过期时间,当缓存数据过期后,用户访问的数据如果不在缓存里,业务系统需要重新生成新的缓存,因为就会访问数据库,并将数据更新到Redis里,这样后续请求就可以直接命中缓存.

当大量缓存在同一时间过期或者Redis宕机时,如果此时有大量的用户请求,都会直接访问数据库,严重的话会造成整个系统崩溃.

大量数据同时过期解决方法:

1. 均匀设置过期时间

给这些数据的过期时间加上一个随机数,保证数据不会同一时间过期.

2. 互斥锁

如果访问的数据不在Redis中,加一个互斥锁,保证同一时间内只有一个请求来构建缓存.实现互斥锁时,需要设置一个超时时间,防止锁一直无法释放.

3. 后台更新缓存

业务线程不再负责更新缓存,缓存也不在设置有效期,而是让缓存"永久有效",并将更新缓存的工作交由后台线程定时更新.

第一种方式,后台线程不仅负责定时更新缓存,而且也负责频繁地检测缓存是否有效,检测到缓存失效了,原因可能是系统紧张而被淘汰的,于是就要马上从数据库读取数据,并更新到缓存。

这种方式的检测时间间隔不能太长,太长也导致用户获取的数据是一个空值而不是真正的数据,所以检测的间隔最好是毫秒级的,但是总归是有个间隔时间,用户体验一般。

第二种方式,在业务线程发现缓存数据失效后(缓存数据被淘汰),通过消息队列发送一条消息通知后台线程更新缓存,后台线程收到消息后,在更新缓存前可以判断缓存是否存在,存在就不执行更新缓存操作;不存在就读取数据库数据,并将数据加载到缓存。这种方式相比第一种方式缓存的更新会更及时,用户体验也比较好。

Redis故障宕机解决方法

1. 服务熔断或请求限流机制

因为 Redis 故障宕机而导致缓存雪崩问题时,我们可以启动服务熔断机制,暂停业务应用对缓存服务的访问,直接返回错误. 也可以启动 请求限流 机制 , 只将少部分请求发送到数据库处理.

2. 构建 Redis 缓存高可靠集群

服务熔断或请求限流机制是缓存雪崩发生后的应对方案,我们最好通过主从节点的方式构建 Redis 缓存高可靠集群

2.缓存击穿

缓存击穿属于缓存雪崩的一个特例.

3.缓存穿透

用户访问的数据,即不在缓存中,也不再数据库中,导致请求在访问缓存时,发现缓存缺失,再去访问数据库时,发现数据库中也没有要访问的数据,没法构建缓存数据,来服务后续请求.

解决方法:
1.非法请求的限制

当有大量恶意请求访问不存在的数据时,也会发生缓存穿透,因此在判断出是恶意请求时,直接返回错误.

2.缓存空值或默认值

针对查询数据,在缓存中设置一个空值或默认值.

3.第三种方案,使用布隆过滤器快速判断数据是否存在,避免通过查询数据库来判断数据是否存在。

数据写入数据库时,使用布隆过滤器做个标记,然后在用户请求到来时,可以通过查询布隆过滤器来判断数据是否存在.如果不存在就不需要查询数据库了. 即使发生了缓存穿透,大量请求也只会查询Redis和布隆过滤器,而不会查询数据库.并且Redis自身支持布隆过滤器.

布隆过滤器会通过3个操作完成标记:

  • 使用N个哈希函数分别对数据进行哈希计算,得到N个哈希值.
  • 将第一步得到的哈希值对位图长度取模,得到每个哈希值在位图数组的对应位置
  • 将对应位置的值设为1.

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

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

相关文章

Nginx和Tomcat实现负载均衡群集部署应用

🏡作者主页:点击! 🐧Linux基础知识(初学):点击! 🐧Linux高级管理专栏:点击! 🔐Linux中firewalld防火墙:点击! ⏰️创作时间&…

减少CMOS模拟开关导通电阻引起的失真

1 简介 许多数据采集系统的在多通道间选择时需要使用模拟开关,相比同类的机械开关,半导体开关锁表现出的工作特性是迥然不同的。如:处在闭合位置的CMOS开关的电阻(导通电阻 “Ron”)会因输入电压的不同而改变。该特性通…

IMU的加速度补偿、祛除向心力

目录 1. 简介2. 仅有XY偏移的修正过程3. 3D修正过程 1. 简介 一般,我们期望用IMU测量某个Target坐标系的加速度、角速度信息,然而IMU的坐标系与Target 坐标系一般存在位姿关系,此时IMU测量的加速度不能直接代表Target左坐标系的加速度。比如…

python库(10):SpaCy库实现NLP处理

1 SpaCy简介 自然语言处理(NLP)是人工智能领域中一个重要的分支。它旨在使计算机能够理解、解释和生成人类语言。Python中的SpaCy库提供了丰富的功能和工具,SpaCy是一个开源的软件库,用于处理和操作自然语言文本,可以…

uniapp颜色选择器

https://github.com/mehaotian/t-color-picker/ 优化点&#xff1a; 1.添加点击事件支持。 2.open时使用外部设置的颜色属性。 3.默认rgba模式&#xff0c;并且支持手动输入rgb。 本人优化后的代码如下&#xff1a; <template><view v-show"show" class&q…

Codeforces Round 957 (Div. 3)

A题&#xff1a;Only Pluses 思路&#xff1a; 数据范围小&#xff0c;直接暴力枚举。 code&#xff1a; inline void solve() {int a, b, c; cin >> a >> b >> c;int ans 0;for (int i a; i < a 5; i ) {for (int j b; j < b 5; j ) {for …

qt udp 协议 详解

1.qt udp 协议链接举例 在Qt框架中&#xff0c;使用UDP协议进行通信主要依赖于QUdpSocket类。以下是一个基于Qt的UDP通信示例&#xff0c;包括UDP套接字的创建、绑定端口、发送和接收数据报的步骤。 1. 创建UDP套接字 首先&#xff0c;需要创建一个QUdpSocket对象。这通常在…

BM42:混合搜索的新基准 - Qdrant

在过去的 40 年里&#xff0c;BM25 一直是搜索引擎的标准。它是一种简单但功能强大的算法&#xff0c;已被许多搜索引擎使用&#xff0c;包括 Google、Bing 和 Yahoo。 虽然看起来向量搜索的出现会削弱其影响力&#xff0c;但效果并不明显。目前最先进的检索方法试图将 BM25 与…

python库(11):Box库简化字典和对象之间的转换

1Box库简介 Box是一个Python库&#xff0c;它提供了一种将数据封装在字典和列表中的方式&#xff0c;同时提供了一些额外的功能&#xff0c;比如数据验证、默认值设置等。这使得Box库非常适合用于配置管理、数据传输对象&#xff08;DTO&#xff09;的创建&#xff0c;以及任何…

sqlmap使用之-post注入、head注入(ua、cookie、referer)

1、post注入 1.1、方法一&#xff0c;通过保存数据包文件进行注入 bp抓包获取post数据 将数据保存到post.txt文件 加上-r指定数据文件 1.2、方法二、通过URL注入 D:\Python3.8.6\SQLmap>python sqlmap.py -u "http://localhost/login.php" --data "userna…

替换:show-overflow-tooltip=“true“ ,使用插槽tooltip,达到内容可复制

原生的show-overflow-tooltip“true” 不能满足条件&#xff0c;使用插槽自定义编辑&#xff1b; 旧code <el-table-column prop"reason" label"原因" align"center" :show-overflow-tooltip"true" /> <el-table-column pro…

如何预防网站数据泄露

如何预防网站数据泄露?在数字化浪潮中&#xff0c;网站不仅是企业展示形象与服务的窗口&#xff0c;更是数据存储与传输的枢纽。随着网络攻击技术的日益复杂&#xff0c;网站数据泄露的风险也随之攀升。一旦敏感数据如客户信息、财务记录等被不法分子窃取&#xff0c;企业将面…

压缩文件的解析方式

Java中我们用ZipInputStream和ZipOutputStream来完成对zip文件和rar文件的读写 I /O流&#xff1a; Input:输入&#xff0c;通过“输入流”进行文件的读取操作 output:输出&#xff0c;通过“输出流”进行文件的写入操作 一、将压缩包解压缩 1.解压缩.zip格式文件&#xf…

微信小程序毕业设计-汽车维修项目管理系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

NoSQL 之Redis集群模式

一&#xff1a;Redis集群方式 Redis有三种模式&#xff1a;分别是主从复制、哨兵模式、Cluster 1&#xff1a;主从模式: 主从复制是高可用Redis的基础&#xff0c;哨兵和群集都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份&#xff0c;以及对于读操作的…

netscaler LDAP+RADIUS传统的双因素认证方式(之一)

如果使用传统的双因素认证方式&#xff0c;可以通过在Citrix ADC (NetScaler) 13.1上配置Gateway Virtual Server来实现LDAP和RADIUS的双因素认证。当前配置方式&#xff0c;采用Cateway vServer两个Basic Authtication Policy方式实现&#xff0c;以下是详细步骤&#xff1a; …

【码题集】习题

目录 史莱姆融合 松鼠接松果 新月轩就餐 史莱姆融合 根据题意就是一道集合合并的题&#xff0c;所以要用并查集&#xff0c;不过最后我们要输出整个序列&#xff0c;所以要在合并的时候维护一个链表&#xff0c;以便最终合并成一个大集合的时候&#xff0c;输出整个链表就是…

针对不支持AJAX异步查询的虚拟空间做跨站点查询

最近在做一个ASPACCESS的企业小站&#xff0c;因为有中文、英文版分开不同空间不同域名的需求。原构想用AJAX做异步查询相关质保数据&#xff0c;但上线了才发现新网的虚拟空间不支持AJAX异步&#xff0c;咨询客服后也没有效的方法。后来想到&#xff1a;远程JS应该是每天的&am…

Kotlin Misk Web框架

Kotlin Misk Web框架 1 添加依赖1.1 build.gradle.kts1.2 settings.gradle.kts1.3 gradle.properties 2 请求接口3 程序模块4 主服务类5 测试结果 Misk 是由 Square 公司开发的一个开源的多语言服务器框架&#xff0c;主要用于构建微服务。它主要使用 Kotlin 语言&#xff0c;但…

UGC与AI引领的下一个10年,丝芭传媒已经准备好

丝芭传媒最近传来的消息&#xff0c;都跟技术相关。 基于自研AI大模型“Paro&#xff08;心乐舞河&#xff09;”的AIGPT及AIGC生成工具APP“鹦鹉人”开启用户内测。2023年3月技术测试的图形化智能社交基座“美踏元宇宙”&#xff0c;也将开放首轮用户内测。 此外&#xff0c…