什么是redis缓存的雪崩、穿透以及击穿

news2025/1/16 16:05:07

缓存雪崩

举个例子,例如在双十一中,一点进去。访问量大,所以它很多数据是放在redis区缓存起来,对应redis的100个key。然后假设设置缓存失效时间是三小时。当双十一期间,购物超过这个三小时之后。这个首页的redis缓存会在一瞬间全部失效,导致所有的请求都会打到这个数据库上,造成这个数据库相应不及时而挂掉。这个时候呢,首页没办法再继续对外提供服务

那么缓存雪崩它解决方案有以下几种:

        1、第一个就是设置这个首页缓存的失效时间,让他不要在同一时间失效。在我们设置这个缓存的时候,随机初始化他这个失效时间。这样的话所有的缓存就不会在同一时间失效。

        2、还有redis一般都是集群部署的,我们把这些热点的key放到不同的节点上去,让这些热点的缓存平均的分布在这个不同的redis节点上。(简单就是多个redis多个请求)

        3、最暴力的方法,就是不设置缓存失效的时间,让他永远不失效。

        4、跑定时任务,让他定时的刷缓存。比如我这个缓存设置了三小时时效,那么我在失效之前,就把这个redis缓存给他重新跑进去。然后再设置三小时。不断地用定时任务去刷新,这个缓存就不会失效。

缓存穿透

        举个例子,比如说老哥自己开发了一个网站,然后这个网站非常地火爆,动了某些人的蛋糕,然后遭到疯狂的攻击就是采用缓存穿透。大家都知道数据库主键从0开始递增,没有负数。那么黑客就是利用这一点,他不断地利用这个id小于零地这个参数给它发请求。我把数据库里面,所有地数据都放到了redis,但是他用id小于零地数来请求,redis里面没有这个id,这样地话redis就查不到这个结果,一旦这个redis查不到这个结果,就会去数据库中查。那么就会造成请求不断地打到数据库上。因为中间redis这层是不能拦截这样的数据,这个redis直接被这种数据给穿透。

        就一直写这个id为-1的自动化脚本即可

解决办法

        1、这个请求如果穿透这个redis直接到这个数据库,我数据库无论查出什么结果,是空值还是有值,都会缓存到redis里去。这样他下次用同一个参数来发请求的时候就不会穿透这个redis。但是他可能会换不同的参数。

        2、把他这个ip拉黑,但是他也可能换不同的ip

        3、对参数的合法性检验,在判断这个参数不合法的时候,直接return掉

        4、布隆过滤器。布隆过滤器可以用于缓解缓存击穿问题。它被放置在缓存之前,作为一个快速的预过滤器。当一个请求到达时,首先经过布隆过滤器。如果布隆过滤器认为请求对应的数据肯定不在缓存中,就可以直接拒绝这个请求,而无需查询缓存或数据库。这样就可以避免大量请求落到数据库上,减轻了数据库的压力。

缓存击穿

        我们还拿双十一来举例     。比如很多人在九点的时候准时拍卖这个鞋。这个鞋的数据被放到了redis缓存里,对应这一个redis一个缓存的key。当这个鞋的缓存key超过缓存时间突然失效了,导致大量的请求查询不到这个数据

解决方案

        1、让缓存永远不过期肯定不好

        2、分布式锁。如果是当体应用的话就可以使用分布式锁。首先大量用户访问这个redis请求数据,如果有的话就会返回给用户。如果redis里面的数据为空的话,他就会请求这个数据库去请求数据。我们就在这个请求数据库这一步给他上锁。那么这个时候就只有一个线程,能抢到这个锁,那么对数据库的压力就非常小。当他查询到这个数据之后,会把缓存重新写道这个ride里面去。其他没有抢到锁的线程,先让他睡几毫秒,然后再重新去redis里面去查询这个数据。

分布式锁具体怎么实现?可以用zookeeper或者redis去实现这分布式锁

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

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

相关文章

Excel、PowerQuery 和 ChatGPT 终极手册(上)

原文:Ultimate ChatGPT Handbook for Enterprises 译者:飞龙 协议:CC BY-NC-SA 4.0 序言 在不断发展的数据管理和分析领域中,掌握 Excel 的查找功能不仅是一种技能,更是高效数据处理的基石。《使用 Power Query 和 Ch…

Red Hat Enterprise Linux release 8.4安装Jenkins

1. 查看安装 1.1 显示 Linux 系统的详细信息,包括内核版本、操作系统版本和其他相关信息 uname -a1.2 查看 Red Hat Linux 系统的版本 cat /etc/redhat-release # 或者 cat /etc/os-release1.3 查看 JDK 是否安装 java -version #查看安装路径 echo $JAVA_HOME1…

Docker 哲学 - docker swarm

Docker Swarm 模式下的集群管理和服务恢复机制 Docker Swarm 是 Docker 的集群管理和编排功能。在 Swarm 模式下,你可以将多个 Docker 主机组合成一个虚拟主机,称为 Swarm 集群。Swarm 集群由一个或多个管理节点(manager nodes)和…

前端开发基础(HTML5 + CSS3)【第一篇】:HTML标签之文字排版、图片、链接、音频、视频 涵盖了两个综合案例 做到了基础学得会,实战写的出

点击前往前端开发基础专栏: 文章目录 HTML5 CSS3 开发一、开发环境搭建下载 VS Code1. 2 插件的下载1.3 项目和文件的下载 二、 什么是 HTML2.1 标签的语法2.2 代码演示:2.3 小结 三 、HTML基本骨架3.1 快捷键生成HTML骨架3.2 代码展示3.3 小结 四、标…

【游戏逆向】逆向基础之寄存器和内存

寄存器是中央处理器内的组成部分 它们可用来暂存指令、数据和地址。 具有这样功能还有内存 我们这里说的内存都是指虚拟内存。 寄存器和虚拟内存的主要区别在于它的存储和读取速度更快,那么有的同学会说,那我们全用寄存器就好了,但是&…

NOI - OpenJudge - 2.5基本算法之搜索 - 1490:A Knight‘s Journey - 超详解析(含AC代码)

点赞关注吧~ 1490:A Knights Journey 查看提交统计提问 总时间限制: 1000ms 内存限制: 65536kB 描述 Background The knight is getting bored of seeing the same black and white squares again and again and has decided to make a journey around the world. When…

数据仓库面试总结

文章目录 1.什么是数据仓库?2.ETL是什么?3.数据仓库和数据库的区别(OLTP和OLAP的区别)4.数据仓库和数据集市的区别5.维度分析5.1 什么是维度?5.2什么是指标? 6.什么是数仓建模?7.事实表7.维度表…

StarRocks实战——华米科技埋点分析平台建设

目录 前言 一、原有方案及其痛点 二、引入StarRocks 三、方案改造 3.1 架构设计 3.2 数据流程 3.3 性能指标 3.4 改造收益 前言 华米科技是一家基于云的健康服务提供商,每天都会有海量的埋点数据,以往基于HBase建设的埋点计算分析项目往往效率上…

号卡极团分销管理系统 index.php SQL注入漏洞复现

0x01 产品简介 号卡极团分销管理系统,同步对接多平台,同步订单信息,支持敢探号一键上架,首页多套UI+商品下单页多套模板,订单查询支持实时物流信息、支持代理商自定义域名、泛域名绑定,内置敢探号、172平台、号氪云平台第三方接口以及号卡网同系统对接! 0x02 漏洞概述…

在ssh 工具 Linux screen会话中使用鼠标进行上下滚动

经过几次发现 除xshell外, WindTerm finalshell MobaXterm 都是进入会话后,发现其界面无法滚动屏幕向上查看 如果想要在Linux screen会话中使用鼠标进行上下滚动。必须首先进入该screen的回滚(scrollback模式)才能进行上下滚动 第一步&#xff…

RobotFramework测试框架(2)-测试用例

创建测试数据 测试数据语法 这里的测试数据就是指的测试用例。 测试文件组织 测试用例的组织层次结构如下: 在测试用例文件( test case file )中建立测试用例 一个测试文件自动的建成一个包含了这些测试用例的测试集( test s…

TCP/IP协议、HTTP协议和FTP协议等网络协议包简介

文章目录 一、常见的网络协议二、TCP/IP协议1、TCP/IP协议模型被划分为四个层次2、TCP/IP五层模型3、TCP/IP七层模型 三、FTP网络协议四、Http网络协议1、Http网络协议简介2、Http网络协议的内容3、HTTP请求协议包组成4、HTTP响应协议包组成 一、常见的网络协议 常见的网络协议…

A First Course in the Finite Element Method【Daryl L.】|PDF电子书

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现,并提供所有案例完整源码;2.单元…

STM32 PWM方式读取AS5600磁编码器数据

HAL STM32 PWM方式读取AS5600磁编码器获取角度例程 📍相关篇《STM32 软件I2C方式读取AS5600磁编码器获取角度例程》 📌《HAL STM32 硬件I2C方式读取AS5600磁编码器获取角度例程》 🍁先通过IIC读取的角度值和逻辑分析仪抓取的AS5600 OUT引脚…

超越聊天机器人:语言模型揭秘

原文:More than a Chatbot 译者:飞龙 协议:CC BY-NC-SA 4.0 致谢 我要感谢激励我写这本书的跨学科项目合作伙伴,特别是“BIAS:减轻劳动力市场 AI 多样性偏见”地平线欧洲项目,以及我的研究小组和其他研究同…

MySQL-逻辑架构:逻辑架构分析、SQL执行流程、数据库缓冲池

逻辑架构 1. 逻辑架构剖析 1.1 第1层:连接层 系统(客户端)访问MySQL服务器前,做的第一件事就是建立TCP连接。 经过三次握手建立连接成功后,MySQL服务器对TCP传输过来的账号密码做身份认证、权限获取。 用户名或密码…

玩转ChatGPT:Kimi测评(图片识别)

一、写在前面 ChatGPT作为一款领先的语言模型,其强大的语言理解和生成能力,让无数用户惊叹不已。然而,使用的高门槛往往让国内普通用户望而却步。 最近,一款由月之暗面科技有限公司开发的智能助手——Kimi,很火爆哦。…

【Latex】参考文献标号未对齐解决方案

Latex写论文时发现最后参考文献标号出现如下没有对齐的情况: 解决方案: 将参考文献开始出的序号1改为99(或者其他大点的数字也可以) ⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇

非关系型数据库-----------探索Redis支持五种数据类型

目录 一、Redis支持五种数据类型 1.String(字符串) 2.Hash(哈希) 3.List(列表) 4.Set(集合) 5.sorted set(有序集合) 二、Redis的字符串类型string 1、 SET/GET/APPEND/STRL…

【考研经验贴】24考研860软件工程佛系上岸经验分享【丰富简历、初复试攻略、导师志愿、资料汇总】

😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本文讲解24考研860软件工程佛系上岸经验分享【丰富简历、初复试攻略、导师志愿、资料汇总】,期待与你一同探索、学习、进步,一起卷起来叭! 目…