缓存穿透、雪崩、击穿简单认识

缓存穿透

原因 :同一时间大量请求访问缓存中不存在的数据,因为缓存中没有,所以大量请求直接进入数据库,但是数据库中也没有,导致一时间数据库请求量过大!

处理办法:

  1. 布隆过滤器

    通过布隆过滤器,判断该数据库是不是数据库一定不存在的数据!然后保存在缓存中,下次 访问,对一定没有的数据直接返回

  2. 设置过期时间

    对于一定不存在的数据 设置一个过期时间,下次访问,如果获取到这个key的value ( 这个value 自己设置一个代表为查询结果为null 的 比如 "abcdeftfdafa90sfads89f08asdfa")

缓存雪崩

原因: 大量缓存的数据,同一时刻失效,同时大量请求也访问该数据,导致直接访问数据库。

处理办法:

  1. 缓存的数据设置一个随机过期时间
  2. 使用熔断机制,添加一个保护机制
  3. redis 集群 或者 主从复制
  4. mysql 集群 或者 主从复制

缓存击穿

原因: 一个高热点数据,大量请求访问,比如访问量如果失效了,会出现大量数据库进入数据库进行 查询、修改操作

处理办法

  1. 对于高热点数据,尽量设置较大的 过期时间 或者设置永不过期时间
  2. 使用互斥锁,大量请求进入,只有拿到了锁请的请求才能访问数据库 ( 分布式情况下使用分布式锁

总结

  • 穿透 :都穿透了,掏空了,还是查不到。( 缓存->数据库->result == null )

  • 雪崩 : 发生了雪崩没有一片雪花是无辜的 ( 缓存大量失效 - > 压力给到了数据库,可能导致宕机 )

  • 击穿 :通过一个点,破!( 热点数据 -> 压力给到了数据库 )

posted @ 2023-03-03 18:01  wuxin001  阅读(40)  评论(0编辑  收藏  举报