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

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

相关推荐
q***188417 分钟前
Ubuntu上安装、使用Redis的详细教程
redis·ubuntu·bootstrap
程序员小白条17 分钟前
你面试时吹过最大的牛是什么?
java·开发语言·数据库·阿里云·面试·职场和发展·毕设
老华带你飞33 分钟前
社区养老保障|智慧养老|基于springboot+小程序社区养老保障系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序·毕设·社区养老保障
Coding_Doggy1 小时前
链盾shieldchiain | 团队功能、邀请成员、权限修改、移除成员、SpringSecurity、RBAC权限控制
java·开发语言·数据库
凯子坚持 c1 小时前
不用复杂配置!本地 Chat2DB 秒变远程可用,跨网操作数据库就这么简单
数据库
q***65691 小时前
Windows环境下安装Redis并设置Redis开机自启
数据库·windows·redis
q***47431 小时前
Windows 和 Linux 系统下,如何查看 Redis 的版本号?
linux·windows·redis
q***96581 小时前
Windows版Redis本地后台启动
数据库·windows·redis
利刃大大1 小时前
【c++中间件】redis介绍 && redis-plus-plus库使用
c++·redis·中间件