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

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

相关推荐
苦夏木禾10 分钟前
js请求避免缓存的三种方式
开发语言·javascript·缓存
重庆小透明15 分钟前
力扣刷题记录【1】146.LRU缓存
java·后端·学习·算法·leetcode·缓存
Edingbrugh.南空1 小时前
Flink SQLServer CDC 环境配置与验证
数据库·sqlserver·flink
码不停蹄的玄黓1 小时前
MySQL分布式ID冲突详解:场景、原因与解决方案
数据库·分布式·mysql·id冲突
爱上语文2 小时前
Redis基础(6):SpringDataRedis
数据库·redis·后端
Java初学者小白2 小时前
秋招Day14 - Redis - 应用
java·数据库·redis·缓存
奈斯ing2 小时前
【Redis篇】数据库架构演进中Redis缓存的技术必然性—高并发场景下穿透、击穿、雪崩的体系化解决方案
运维·redis·缓存·数据库架构
一眼万年043 小时前
Redis Cluster模式
redis·微服务
丶意冷3 小时前
mybatisPlus分页方言设置错误问题 mybatisPlus对于Oceanbase的Oracle租户分页识别错误
java·数据库·oracle·oceanbase
deriva5 小时前
.netcore+ef+redis+rabbitmq+dotcap先同步后异步再同步的方法,亲测有效
redis·rabbitmq·.netcore