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

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

相关推荐
Rain的Java大神之路39 分钟前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
十二同学啊1 小时前
向量数据库:从核心原理到 RAG 与 Java 实战
数据库
Wang's Blog1 小时前
Java 接入Redis: 通用命令与键管理
java·服务器·redis
Wang's Blog1 小时前
Java 接入Redis: 列表集合与有序集合操作命令
java·服务器·redis
蓝速科技2 小时前
会议室门牌公告通知发布选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
Together_CZ2 小时前
DeepSeek-V4.1-Flash:Pushing the Limits of KV Cache Compression——推动 KV 缓存压缩的极限
缓存·llm·compression·kv cache·deepseek·v4.1-flash·推动 kv 缓存压缩的极限
一 乐4 小时前
二手交易平台|基于springboot + vue二手交易平台(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序
SelectDB5 小时前
同等资源下 Apache Doris 4.2 vs StarRocks 4.1.1:1TB SSB 与 TPC-H 性能实测
大数据·数据库·数据分析
这个DBA有点耶5 小时前
数据库集群与分布式架构:三条技术路线对比、金仓KES RAC实测数据与决策框架
数据库·程序员·架构
MayBaymax5 小时前
MongoDB 索引与事务
java·数据库·mongodb