Redis 缓存预热、雪崩、穿透、击穿

  1. 缓存预热

    1. 缓存预热是什么
      1. 缓存预热就是系统上线后,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!
    2. 解决方案
      1. 使用 @PostConstruct 、定时任务、手动处理 提前将数据设置到缓存中
  2. 缓存雪崩

    1. 缓存雪崩是什么

      1. 缓存雪崩就是瞬间过期数据量太大,导致对数据库服务器造成压力
    2. 发生场景

      1. redis 主机挂了, Redis全盘崩溃,偏硬件运维
      2. redis 中有大量key 同时过期大面积失效,偏软件开发
    3. 解决+预防方案

      1. redis 中 key 设置为永不过期 or 过期时间错开
      2. redis 缓存集群实现高可用
        • 主从 + 哨兵
        • Redis 集群
        • 开启Redis 持久化机制 aof / rdb,尽快恢复缓存集群
      3. 多缓存结合预防雪崩
        • ehcache 本地缓存 + redis缓存
      4. 服务降级
        • Hystrix 或者 sentinel 限流 & 降级
  3. 缓存穿透

    1. 缓存穿透是什么
      1. 缓存穿透 就是请求去查询一条数据,先查redis,redis里面没有,再查mysql,mysql里面无,都查询不到该条记录,但是请求每次都会打到数据库上面去,导致后台数据库压力暴增
    2. 解决方案
      1. 空对象缓存或者缺省值, 如果发生缓存穿透,可以针对要查询的数据,在Redis里存一个和业务部门商量后确定的缺省值 比如 零、负数、defaultNull等
      2. 使用布隆过滤器,将key放到布隆过滤器中,请求来了用布隆过滤器判断key是否存在,如果存在则走后续逻辑,不存在则直接返回
  4. 缓存击穿

    1. 缓存击穿是什么
      1. 缓存击穿就是大量请求同时查询一个key时,此时这个key正好失效了,就会导致大量的请求都打到数据库上面去,也就是热点key突然都失效了,MySQL承受高并发量
    2. 解决方案
      1. 差异失效时间,对于访问频繁的热点key,干脆就不设置过期时间
      2. 互斥更新,采用双检加锁
  5. 总结

相关推荐
JavaEdge.6 分钟前
设定索引方法和检索设置
数据库
小蒜学长9 分钟前
基于Vue.js + Spring Boot的酒店客房预订系统设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·酒店客房预订系统
墨者阳10 分钟前
KingbaseES V9R2C16 深度实测:64位事务ID、内存防护、集群备份与坏块修复四大能力全解析
数据库
豆角焖肉15 分钟前
SpringBoot + Redis 缓存实战
java·spring boot·redis·后端·缓存·菜单缓存
事圆则缓16 分钟前
聊天与引用回复的 SQL 怎么设计
数据库·sql
APItesterCris16 分钟前
告别反复手工查价:用 Open‑Claw 搭建商品监控与数据分析小工具
大数据·数据库·数据仓库·自动化
来福猿21 分钟前
分布式锁 Redis 实现源码分析:SETNX、过期时间与可重入设计
数据库·redis·分布式
xiangyun6126 分钟前
C++ list 模拟实现(一):手撕双向链表,从节点到迭代器
数据库·c++·算法·链表·stl·list
wespaul30 分钟前
一条自然语言命令的 49 个节点:可视化编排与每段强校验
前端·数据库
KIDULT°9 小时前
MySQL系列 (1):数据库原理
运维·数据库·mysql·云计算