缓存的雪崩、击穿、穿透

 一、缓存的雪崩、击穿、穿透   

        缓存的雪崩、击穿和穿透是常见的缓存相关问题,它们可能导致缓存系统性能下降或服务不可用。

1.1  缓存雪崩(Cache Avalanche)

        缓存雪崩指在某个时间点,缓存中大量的数据同时失效或过期,导致大量请求直接访问后端数据库或其他资源,从而造成数据库压力过大或服务崩溃。通常是由于缓存中的数据设置了相同的过期时间,当这些数据同时失效时,会导致大量请求直接落到数据库上。

  • 解决方法:
    • 设置缓存数据的随机过期时间,避免同时失效。
    • 使用多级缓存架构,将请求分散到不同的缓存节点上。
    • 监控缓存状态,及时发现并处理缓存失效问题。

1.2  缓存击穿(Cache Breakdown)        

       缓存击穿指一个热点数据在缓存中过期或被删除时,恰好有大量的并发请求访问该数据,导致这些请求都直接访问后端数据库或其他资源,从而造成数据库压力过大或服务崩溃。与缓存雪崩不同的是,缓存击穿只针对某个特定的缓存数据。

  • 解决方法:
    • 使用互斥锁或分布式锁,保证只有一个请求能够访问后端资源,并在获取到数据后更新缓存。
    • 针对热点数据设置永不过期,避免缓存失效。

1.3  缓存穿透(Cache Penetration)

        缓存穿透指恶意请求查询缓存中不存在的数据,导致这些请求都直接访问后端数据库或其他资源,从而造成数据库压力过大或服务崩溃。通常是由于恶意攻击、非法请求或错误的业务逻辑导致。

  • 解决方法:
    • 对查询结果为空的情况也进行缓存,设置一个较短的过期时间,避免频繁查询数据库。
    • 进行参数校验和合法性验证,过滤掉非法请求。
    • 使用布隆过滤器等技术,请求白名单,提前过滤掉不存在的数据。

1.4  总结

        缓存雪崩和缓存击穿是因为数据过期或删除不存在(或服务异常获取不到),导致大量请求访问数据库,从而导致数据库压力骤增,甚至崩溃。

        而缓存穿透则是由于数据本身就不存在,导致缓存没有进行数据缓存,流量直接大量进入数据库层。

猜你喜欢

转载自blog.csdn.net/chaojichunshen/article/details/131838877