07_缓存预热&缓存雪崩&缓存击穿&缓存穿透

缓存预热&缓存雪崩&缓存击穿&缓存穿透

一、缓存预热

提前将数据从数据库同步到redis。

  1. 在程序启动的时候,直接将数据刷新到redis
  2. 懒加载,用户访问的时候,第一次查询数据库,然后将数据写入redis

二、缓存雪崩

  1. 发生情况
    1. redis主机挂了,redis全盘崩溃,偏硬件运维
    2. redis中有大量key同时过期或大面积失效,偏软件开发
  2. 预防&解决方法
    1. redis中key设置永不过期,或者过期时间错开
    2. redis集群实现高可用
      1. 主从+哨兵
      2. redis 集群
      3. 开启redis持久化aof、rdb,尽快恢复集群数据
    3. 多缓存结合预防雪崩
      1. encache本地缓存+redis缓存
    4. 服务降级
      1. hystrix或者sentinel限流&降级
    5. 使用云服务redis

三、缓存穿透

  1. 是什么

    1. 请求去查询一条记录,先查redis无,后查mysql无,都查询不到该条记录,但是请求每次都会打到数据库上面去,导致后台数据库压力暴增,这种现象我们称为缓存穿透,这个redis就变成了一个摆设。

    2. 简单说就是,本来无一物,两库都没有。既不在Redis,也不在数据库,数据库存在被多次暴击风险

  2. 解决

    1. 缓存穿透最怕恶意攻击,使用空对象缓存、布隆过滤器可解决

    2. 空对象缓存或者缺省值

      黑客或者恶意攻击

      黑客会对你的系统进行攻击,拿一个不存在的id去查询数据,会产生大量的请求到数据库去查询。可能会导致你的数据库由于压力过大而宕掉。

      1. key相同

        第一个打到mysql,空对象缓存后,第二次就返回null或者默认值,避免mysql被打击,不用再查询数据库。

      2. key不相同

      由于存在空对象缓存和缓存回写,redis中的无关紧要的key也会越来越多,需要设置过期时间

    3. 使用google guava布隆过滤器

      guava中布隆过滤器的实现比较权威,所以实际项目中可以直接使用guava布隆过滤器

      案例:白名单过滤

四、缓存击穿

  1. 是什么

    大量的请求同时查询一个key,并且这个key此时正好失效了,就会导致大量的请求到达数据库。

    简单的说就是热点key突然失效,暴打mysql

  2. 危害

    会造成某一时刻数据库请求过大,压力剧增

    一般需要技术部门知道哪些是热点key,防止击穿

  3. 解决

    缓存击穿,热点key失效,解决方法:互斥更新、随机退避、差异失效时间

    失效原因:

    1. 时间到了自然清除,但还被访问到了
    2. 删除key的时候,突然被访问到了

    解决方法:

    1. 差异失效时间,对于访问频繁的热点key,就不设置过期时间

    2. 互斥更新,采用双检加锁策略

五、总结

相关推荐
小七-七牛开发者8 天前
TokenPilot:让 LLM Agent 长会话成本降 60%+ 的上下文管理
缓存·agent·token·context·上下文·推理成本
ofoxcoding15 天前
在AI API聚合平台配置DeepSeek V3.2提示词缓存实战:快速接入与成本优化指南
人工智能·spring·缓存·ai
NeilYuen15 天前
gRPC结合FAISS构建AI助手语义缓存模块(一):设计
人工智能·缓存·faiss
taocarts_bidfans15 天前
反向海淘跨境缓存架构优化:taocarts Redis分层缓存实战技术
redis·缓存·架构·反向海淘·taocarts
退休倒计时15 天前
【每日一题】LeetCode 146. LRU 缓存 TypeScript
算法·leetcode·缓存·typescript
炘爚15 天前
Linux——Redis
数据库·redis·缓存
小挪号底迪滴15 天前
Redis 和 MySQL 数据不一致怎么办?缓存更新策略实战
redis·mysql·缓存
闪电悠米16 天前
黑马点评-Redis ZSet-实现关注 Feed 流
服务器·网络·数据库·redis·缓存·junit·lua
Saniffer_SH16 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试