十五.redis缓存穿透,击穿,雪崩
redis哨兵模式
- 一.缓存穿透
- 1.概念
- 2.解决方案
- 1)接口校验
- 2)缓存空值
- 3)布隆过滤器
- 4)实时监控
- 二.缓存击穿
- 1.概念
- 2.解决方案
- 1)设置热点数据永不过期
- 2)加互斥锁
- 3)”提前“使用互斥锁 / 逻辑过期
- 4)对热点数据进行预热
- 三.缓存雪崩
- 1.概念
- 2.解决方案
- 1)redis高可用
- 2)限流降级
- 3)将失效时间分散开
- 4)数据预热
- 5)设置缓存标记
reids缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但是,它也带来一些问题。比如最主要问题就是数据一致性问题,严格意义上该问题无解,所以如果对数据一致性要求很高,那么就不能使用缓存。
另外的一些问题就是如缓存穿透,缓存击穿,缓存雪崩

一.缓存穿透
1.概念
大量高并发请求查询的数据在redis发现不存在(缓存未命中),于是向持久层数据库查询(mysql),发现也不存在,这样缓存永远不会生效。这样大量请求都会请求持久层数据库,这将造成持久层数据库很大压力,这时就出现了所说的缓存穿透。
2.解决方案
1)接口校验
对于id = -1234这类无效查询直接拦截,不允许这些请求到达Redis、DB上。
2)缓存空值
比如,虽然数据库中没有id = 666的用户的数据,但是在redis中对他进行缓存(key=666, value=null),这样当请求到达redis的时候就会直接返回一个null的值给客户端,避免了大量无法获取的数据请求直接访问DB。
注意:
1.key设置的过期时间不能太长,防止占用太多redis资源,设置一个合适的TTL,比如两三分钟。当遇到黑客暴力请求很多不存在的数据时,就需要写入大量的null值到Redis中,可能导致Redis内存占用不足的情况。
2.即使设置了过期时间,还是会存在缓存层和持久层数据会有一段时间的不一致,这对于需要保持一致性的业务有影响。
3)布隆过滤器
布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃,从而避免对底层存储系统的查询压力。

4)实时监控
对redis进行实时监控,当发现redis中的命中率下降的时候进行原因的排查,配合运维人员对访问对象和访问数据进行分析查询,从而进行黑名单的设置限制服务(拒绝黑客攻击)。
二.缓存击穿
1.概念
这里需要注意和缓存穿透的区别,缓存击穿是指一个key非常热点,在不停扛着大并发,大量并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。
当某个key在过期的瞬间,有大量的请求并发访问,这类数据一般是热点数据,由于缓存过期,会同时访问数据库来查询最新数据并回写缓存,会使得数据库瞬间压力过大。
2.解决方案
1)设置热点数据永不过期
从缓存层来看,不设置过期时间,就不会出现热点key过期后产生的问题。
2)加互斥锁
使用setnx作为Redis中的锁。
分布式锁:使用分布式锁,保证对于每个key同时只有一个线程去查询数据库并返回到Redis,其他线程没有获得分布式锁的权限则等待,之后所有请求就可以从Redis中得到响应。这种方式将高并发的压力转移到了分布式锁上。

3)”提前“使用互斥锁 / 逻辑过期
在value内部设置一个比缓存(Redis)过期时间短的过期时间标识,当异步线程发现该值快过期时,马上延长内置的这个时间,并重新从数据库加载数据,设置到缓存中去。【缺点:不保证一致性,实现相较互斥锁更复杂】

4)对热点数据进行预热
对热点数据预先设置在Redis中,或者适当延长Redis中的Key过期时间。
三.缓存雪崩
1.概念
缓存雪崩是指在某一个时间段缓存集中过期失效或redis宕机。
比如双十一在12点集中将一批商品放入了缓存并设置缓存时间为1个小时。当到了凌晨1点钟时,这批商品缓存过期。这时对这批商品进行访问查询都会去访问数据库,对于数据库来说就会产生周期性的压力波峰。于是所有请求都会到达持久层,持久层调用量急增,可能造成数据库宕机。
相对于集中过期来说缓存服务器的宕机是比较致命的缓存雪崩
2.解决方案
1)redis高可用
搭建redis集群,防止单机redis宕机整个缓存不可用
2)限流降级
该方案的思想是,在缓存失效后,通过加锁或者队列来控制读取数据库写缓存的线程数量,比如对某个key只允许一个线程查询数据和回写进缓存(可能影响并发)
3)将失效时间分散开
常用且易于实现通过使用自动生成随机数使得key的过期时间TTL是随机的,防止集体过期。
4)数据预热
在发生高并发前手动触发加载缓存的key使得大量访问数据加载到缓存中。
5)设置缓存标记
热点数据可以不考虑失效,后台异步更新缓存,适用于不严格要求缓存一致性的情景。
其它参考文章
相关文章:
十五.redis缓存穿透,击穿,雪崩
redis哨兵模式 一.缓存穿透1.概念2.解决方案1)接口校验2)缓存空值3)布隆过滤器4)实时监控 二.缓存击穿1.概念2.解决方案1)设置热点数据永不过期2)加互斥锁3)”提前“使用互斥锁 / 逻辑过期4&…...
Spring源码——初识Spring容器
Spring源码之工厂(容器) 为什么把Spring的工厂又叫做容器呢? 工厂的责任是创建对象,但是创建完对象后还要进行存储(针对于单例的对象来讲),以供其他地方使用,这就是容器。为了能存…...
arcgis--数据库构建网络数据集
1、打开arcmap软件,导入数据,如下: 该数据已经过处理,各交点处均被打断,并进行了拓扑检查。 2、在文件夹下新建文件数据库,名称为路网,在数据库下新建要素类,并导入道路shp文件&…...
华为OD机试真题【西天取经】
1、题目描述 【西天取经】 唐僧师徒四人去西天取经,一路翻山越岭。一日,师徒四人途径一个 mxn 长方形区域,已知 1.将取经队伍作为一个整体,4 人行走相同路线。 2.取经队伍的起点为该长方形区域的左上角,目的地为该长方…...
心电信号时域特征分析与Python实现
目录 1 引言 2 心电信号时域特征的含义 3 Python实现心电信号时域特征提取 4 结论 1 引言 心电信号是由心脏电活动引起的电信号...
认识MyBatis 之 MyBatis的动态SQL
前言 本篇介绍MyBatis里如何使用动态SQL,了解如何去简单使用动态标签;如有错误,请在评论区指正,让我们一起交流,共同进步! 文章目录 前言MyBatis - 动态 SQLif标签trim标签where标签update set 标签delet…...
【项目 计网2】4.4网络模型 4.5协议 4.6网络通信的过程
文章目录 4.4网络模型OSI七层参考模型TCP/IP四层模型(常用)简介四层介绍 4.5协议简介常见协议UDP协议TCP协议IP协议以太网帧协议(MAC地址封装)ARP协议(IP->MAC) 4.6网络通信的过程封装分用 4.4网络模型 …...
redis入门3-在java中操作redis
Redis的java客户端 Jedis、Lettuce、Redisson、以及spring提供的spring data redis Jedis操作redis //添加依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.8.0</version> </dep…...
网络安全预警分类流程
网络安全预警指南 随着信息技术的广泛应用与快速发展,传统业务与信息系统的融合程度不断加深,网络安全对国家政治、经济、文化、公共服务活动的影响进一步增大。网络安全形势日趋复杂,安全威胁不断变化,利用网络漏洞、恶意程序从…...
SpringBoot复习:(20)如何把bean手动注册到容器?
可以通过实现BeanDefinitionRegistryPostProcessor接口,它的父接口是BeanFactoryPostProcessor. 步骤: 一、自定义一个组件类: package com.example.demo.service;public class MusicService {public MusicService() {System.out.println(&q…...
VLT:Vision-Language Transformer用于引用的视觉语言转换和查询生成分割
摘要 在这项工作中,我们解决了引用分割的挑战性任务。引用分割中的查询表达式通常通过描述目标对象与其他对象的关系来表示目标对象。因此,为了在图像中的所有实例中找到目标实例,模型必须对整个图像有一个整体的理解。为了实现这一点&#…...
【开源项目--稻草】Day04
【开源项目--稻草】Day04 1. 续 VUE1.1 完善VUEAJAX完成注册功能 Spring验证框架什么是Spring验证框架使用Spring-Validation 稻草问答-学生首页显示首页制作首页的流程开发标签列表标签列表显示原理 从业务逻辑层开始编写控制层代码开发问题列表开发业务逻辑层开发页面和JS代码…...
【数模】奇异值分解SVD和图形处理
介绍奇异值分解在图形压缩中的运用,并将简单介绍下Matlab对于图形和视频的处理 一、奇异值分解介绍 1.1 基本概念 奇异值分解(Singular Value Decomposition,以下简称SVD)是线性代数中一种重要的矩阵分解: U和V都是正交矩阵∑是奇异值矩阵&…...
mongodb-win32-x86_64-2008plus-ssl-3.6.23-signed.msi
Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\Administrator>cd C:\MongoDB\Server\3.6\binC:\MongoDB\Server\3.6\bin> C:\MongoDB\Server\3.6\bin> C:\MongoDB\Server\3.6\bin>mongod --dbpath C:\Mongo…...
华为Euler系统忘记密码之密码重置
目录 1. 进入GRUB引导菜单编辑模式2. 指定系统在启动时使用/bin/sh作为初始化进程3. 修改密码3.1 重新挂载文件系统,使文件系统可写3.2 修改密码3.3 重新标记文件的安全上下文 4. 开机输入修改的密码正常登录 1. 进入GRUB引导菜单编辑模式 启动openEuler࿰…...
Java-多线程-深入理解ConcurrentHashMap
目录 什么是ConcurrentHashMap?为什么有ConcurrentHashMap?和HashMap区别示例代码对比 JDK7和JDK8中ConcurrentHashMap整体架构的区别JDK7中JDK8中 ConcurrentHashMap的基本功能在性能方面的优化使用到的技术-CAS概念说明比较并交换的过程如下࿱…...
没有配置redis但是报错连接redis失败
问题 没有配置redis但是报错连接redis失败 检查maven配置是否引入了redis依赖(可能是传递依赖,最好检查引进来的公共工程 解决办法 只需要在该工程application.yml文件中配置一下 redis就好,或者移除redis依赖 spring:redis:password: hos…...
剑指 Offer 04. 二维数组中的查找
力扣 在一个 n * m 的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix…...
【工作中问题解决实践 九】Spring中事务传播的问题排查
最近在工作中遇到了两个关于事务操作的问题,顺便就着这两个问题又回顾了一遍Spring的事务相关的操作,想着一次性把这个问题研究明白了,后续使用事务的时候也能踏实点,让事务发挥真实的作用 什么是事务?什么是事务管理…...
【导出Word】如何使用Java+Freemarker模板引擎,根据XML模板文件生成Word文档(只含文本内容的模板)
这篇文章,主要介绍如何使用JavaFreemarker模板引擎,根据XML模板文件生成Word文档。 目录 一、导出Word文档 1.1、基础知识 1.2、制作模板文件 1.3、代码实现 (1)引入依赖 (2)创建Freemarker工具类 &…...
03 MongoDB文档的各种增加、更新、删除操作总结
更多内容请见: 《深入掌握MongoDB数据库》 - 专栏介绍和目录 一. 插入文档 注意: 在 MongoDB 中,直接插入内容会自动创建集合! 1.1 使用insert()方法 语法格式: db.COLLECTION_NAME.insert(document) 说明: 若插入的数据主键已经存在,则会抛 org.springframework.dao.Du…...
Wan2.2-I2V-A14B图像转视频实战:基于卷积神经网络的风格迁移与动态生成
Wan2.2-I2V-A14B图像转视频实战:基于卷积神经网络的风格迁移与动态生成 1. 引言:当静态艺术遇见动态魔法 想象一下,你手中有一幅精美的水墨画或一张概念设计草图,如果能让它"活过来",变成一段流动的视频&a…...
iptables实战指南:从链表关系到规则配置的完整解析
1. iptables基础概念与核心组件 第一次接触iptables时,我盯着那些复杂的规则配置看了整整一个下午。后来才发现,理解iptables的关键在于掌握它的"四表五链"架构。简单来说,iptables就像是一个多层安检系统,数据包要经过…...
Phi-3-Mini-128K实战JavaScript:构建前端智能代码提示插件
Phi-3-Mini-128K实战JavaScript:构建前端智能代码提示插件 最近在折腾前端项目时,我总在想,要是写代码时能有个更懂我的助手就好了。现有的代码补全工具虽然不错,但很多时候还是停留在语法层面,对于业务逻辑、复杂函数…...
矿井排水系统直接关系到煤矿安全生产,今天咱们掰开揉碎了聊聊西门子S7-200 PLC控制三台水泵的实战经验。老规矩,先上干货再说原理
基于西门子PLC的煤矿排水系统控制,内容包括 [1]S7-200 PLC程序[2]MCGS6.2组态画面[3]电气图纸精品文档 共有3台水泵进行矿井排水,分别为1号水泵,2号水泵,3号水泵 其中1号,2号水泵是工作水泵,3号水泵是备用水…...
DataQA数问增长:金融小贷行业的“智能风控大脑“实战揭秘
数问"Web渠道转化率仅0.2,欺诈风险高、客户资质差——你的渠道投放预算,有多少正在打水漂?" 💡 真实场景还原:某头部消费金融公司的渠道危机 时间:2026年3月,周一上午9:00 角色&…...
AI赋能软件测试:基于PyTorch视觉模型实现自动化GUI测试脚本生成效果演示
AI赋能软件测试:基于PyTorch视觉模型实现自动化GUI测试脚本生成效果演示 1. 效果亮点预览 想象一下这样的场景:一个AI系统正在自动测试你的软件界面,它能像人类测试工程师一样"看"懂屏幕上的每个元素,发现那些传统脚本…...
别再画线框图了!用Axure/墨刀搞定HIS门诊医生站高保真原型的5个实战技巧
医疗HIS系统高保真原型设计:Axure/墨刀5大进阶技巧 在医疗信息化领域,门诊医生站作为HIS系统的核心模块,其原型设计的质量直接影响开发效率和最终用户体验。传统线框图已无法满足现代医疗系统复杂交互的需求,掌握Axure或墨刀的高阶…...
NVIDIA Profile Inspector 终极指南:免费解锁显卡隐藏性能的完整教程
NVIDIA Profile Inspector 终极指南:免费解锁显卡隐藏性能的完整教程 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 想要让游戏画面更流畅、画质更清晰吗?NVIDIA Profile Inspe…...
3分钟上手弹幕盒子:零基础高效制作自定义弹幕的免费工具
3分钟上手弹幕盒子:零基础高效制作自定义弹幕的免费工具 【免费下载链接】danmubox.github.io 弹幕盒子 项目地址: https://gitcode.com/gh_mirrors/da/danmubox.github.io 弹幕盒子是一款专业的在线自定义弹幕生成工具,以轻量化架构设计为核心&a…...
