redis穿透、击穿、雪崩

穿透

数据库、redis中没有这个数据

解决方法:

  1. redis缓存空对象
  2. 布隆过滤器
  3. 加锁:当有一个key在redis中没查到,就加个锁,去数据库里查出来,再解锁。

挡住无效请求,重复请求

当缓存未命中时,先抢互斥锁,

只有获取锁的线程可以查询数据库,

其他缓存未命中的线程等待或返回默认值

其他缓存未命中的再去抢锁

击穿

一个热门key过期或者一个没被缓存的数据访问量突然增大(数据库有,但没被缓存)

解决方法:

  1. 互斥锁(Mutex Lock):只允许一个线程去重建缓存,其他线程等待或返回旧值。
  2. 永不过期策略:缓存不设置过期时间,通过后台任务定期更新。
  3. 多级缓存:采用本地缓存 + Redis 的两级缓存架构。

雪崩

大量key同时过期

解决方法:

  1. 设置不同过期时间:避免大量 key 同时过期
  2. 多级缓存架构:构建本地缓存 + Redis + 数据库的多级缓存
  3. 热点数据永不过期:对关键数据不设置过期时间,通过后台更新
  4. 熔断降级机制:当数据库压力过大时,暂时拒绝部分请求
  5. 缓存预热:系统启动时提前加载热点数据
  6. 集群部署与分片:通过集群分散压力

redis怎么删除过期key/回收key

后台轮询,分段分批删除哪些过期key

请求的时候判断是否已经过期了

redis怎么淘汰key

内存空间不够了,就得淘汰了

默认情况下是不淘汰的,noeviction​​ (默认策略)达到内存限制时,新写入操作就只会报错

淘汰全体key

过期key淘汰

怎么缓存预热

提前将热点数据加载到缓存中的过程叫缓存预热

如何知道那些key是热点key?

  1. 用户行为分析:通过日志分析高频访问数据
  2. 业务指标:订单量、点击量高的商品/内容
  3. 实时监控:使用Redis监控命令识别热点Key

数据库与缓存数据不一致问题

相关推荐
荒川之神11 分钟前
Oracle HR 模式递归函数练习(基于 employees 表)
数据库·oracle
小陈工20 分钟前
2026年3月31日技术资讯洞察:AI智能体安全、异步编程突破与Python运行时演进
开发语言·jvm·数据库·人工智能·python·安全·oracle
杨云龙UP43 分钟前
Linux生产环境下Oracle RMAN 备份、核查、清理与验证常用命令整理_20260330
linux·运维·服务器·数据库·oracle
橙子家1 小时前
关于列式存储(Column-base Storage)的几个要点解读
数据库
٩( 'ω' )و2601 小时前
MySQL基础
数据库·mysql
生命不息战斗不止(王子晗)2 小时前
mysql基础语法面试题
java·数据库·mysql
知识分享小能手2 小时前
MongoDB入门学习教程,从入门到精通,MongoDB应用程序设计知识点梳理(9)
数据库·学习·mongodb
一直都在5722 小时前
Redis (一)
数据库·redis·缓存
字符串str2 小时前
sql的基本技术栈
数据库·sql·oracle
秦jh_2 小时前
【Redis】客户端使用
数据库·redis·缓存