Redis如何解决缓存击穿,缓存雪崩,缓存穿透

1:缓存击穿

可以把Redis想象成一件防弹衣。MySQL想象成人的身体,当Redis中的一个Key变成了爆款,承担着非常大的并发量,但当这个key突然失效了,就会缓存击穿Redis直接访问MySQL,造成MySQL数据库负荷量太大,影响接口的效率。

解决方法:

1:设置成永不过期(将一些热点数据提前设置成永不过期,当突然有冷门数据访问量变多怎么办,可以设计一个算法,这个算法用来判断,当请求一个key到一定程度时,就能将这个key设置成永不过期)

2:加一个双重校验锁(同步锁):当有请求想访问接口时,我们首先去redis中缓存寻找是否有需要的数据,如果没有进入我们的校验锁,只允许一次访问,其他请求暂时堵塞,这个请求直接在MySQL中寻找,如果有就存到Redis中,如果没有就抛出一个异常

2:缓存雪崩

同样这个是击穿了Redis的同时击穿了MySQL,Redis中的缓存集中过期,可能会造成数据库的宕机

解决方法:

1:设置一个双重校验锁,实现加锁排队

2:在redis中设置随机时间失效,这样就可以避免在短时间内同时失效大量数据

3:Redis的高可用,可以设计几个机房备用

3:缓存穿透

在Redis的缓存之中没有找到相应的数据,然后在MySQL数据库中也没有,大量的情况下造成数据库宕机

解决方法:

1:进行一个参数校验,防止用户恶意查找数据

2:缓存空对象,在防止缓存穿透和缓存雪崩的基础上缓存空对象,记得设置过期时间

3:布隆过滤器(了解即可)

相关推荐
爱学习的阿磊7 分钟前
使用Fabric自动化你的部署流程
jvm·数据库·python
摇滚侠11 分钟前
阿里云安装的 Redis 在什么位置,如何找到 Redis 的安装位置
redis·阿里云·云计算
枷锁—sha13 分钟前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
惜分飞26 分钟前
ORA-600 kcratr_nab_less_than_odr和ORA-600 4193故障处理--惜分飞
数据库·oracle
chian-ocean26 分钟前
CANN 生态进阶:利用 `profiling-tools` 优化模型性能
数据库·mysql
m0_5500246330 分钟前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
AC赳赳老秦30 分钟前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
啦啦啦_999944 分钟前
Redis-2-queryFormat()方法
数据库·redis·缓存
玄同7652 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
吾日三省吾码2 小时前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql