什么是缓存穿透,缓存击穿,缓存雪崩的详细讲解,以及解决方式?

本文详细介绍了缓存穿透、击穿和雪崩的概念,阐述了它们的产生原因、危害及相应的解决策略,如布隆过滤器、互斥锁、热点数据管理等,以提升IT系统的性能和安全性。
摘要由CSDN通过智能技术生成

什么是缓存穿透,缓存击穿,缓存雪崩的详细讲解,以及解决方式?

缓存作用:

​ redis缓存加载数据库中的数据,数据库一般在磁盘中,访问磁盘的效率比较低,所以使用redis缓存,将数据加载到运存中,请求访问时直接访问缓存,如果缓存中有结果,直接返回结果,缓存中没有结果,请求会被打到数据库上,在数据库中的查询数据返回给请求,同时也会将数据加载到缓存中。

缓存穿透:

​ 是指恶意访问或者查询一个不存在的数据,导致缓存层无法命中,每次请求都会直接访问数据库,给数据库造成压力,同时降低了系统性能。

缓存穿透产生的原因:
  • 恶意查询:故意发送查询不存在数据的请求,通过大量无效查询来消耗系统资源。
  • 查询参数异常:由于输入参数错误或异常,导致查询的数据在缓存和数据库中都不存在。
  • 缓存失效:缓存中的数据可能因为过期或被删除而导致失效,需要重新加载到缓存中。
缓存穿透的危害:
  • 数据库压力增加:频繁查询不存在的数据会导致大量无效的数据库访问,增加数据库负载。
  • 系统性能下降:频繁的数据库查询会耗尽系统资源,导致系统性能下降和响应时间延长。
  • 安全风险:恶意攻击可能会利用缓存穿透漏洞进行拖库等攻击,造成数据泄露和安全风险。
解决缓存穿透的方法:
  • 布隆过滤器(Bloom Filter):在缓存层使用布隆过滤器对请求参数进行校验,快速判断请求是否合法,避免无效查询访问数据库。
  • 空值缓存:即使查询结果为空,也将空值缓存在缓存中,避免重复查询。可以设置较短的过期时间,确保缓存数据及时更新。
  • 缓存预热:提前加载常用数据到缓存中,预防缓存失效时对数据库的频繁查询,减少缓存穿透的发生。
  • 限流措施:对请求进行限流,设置访问频率阈值,拦截异常请求,保护数据库不受恶意攻击。
缓存击穿:

​ 是指在高并发场景下,一个缓存中的热点数据突然失效,导致大量请求直接访问数据库,使得数据库压力剧增,引起数据库性能问题。

缓存击穿产生原因:
  • 热点数据:某些热点数据的访问频率很高,在缓存失效时会导致大量请求直接访问数据库。
  • 并发访问:在高并发场景下,同时有多个请求等待获取同一份数据,如果此时缓存失效,就会导致大量请求穿透到数据库。
  • 随机性失效:缓存数据设置的过期时间是随机的,当某个热点数据随机失效时,可能导致缓存击穿问题。
缓存击穿的危害:
  • 数据库压力:大量请求穿透到数据库,增加数据库压力,可能导致数据库性能下降,甚至宕机。
  • 系统稳定性:数据库负载过大可能导致系统响应变慢、服务不可用,影响系统整体稳定性。
  • 数据不一致:在缓存失效和重新加载之间,可能导致数据库和缓存中数据不一致的情况发生。
解决缓存击穿的方法:
  • 互斥锁:在缓存失效时,只允许一个线程去查询数据库并更新缓存,其他线程等待结果即可,避免重复查询数据库。
  • 预先加载:定期刷新热点数据,避免缓存在高并发时突然失效,提前加载数据到缓存中。
  • 热点数据永不过期:对于热点数据,设置永不过期或者设置较长的过期时间,避免频繁失效。
  • 降级策略:当缓存失效时,可以返回默认值或者空数据,而不是直接访问数据库,保证系统正常运行。
缓存雪崩:

​ 是指在某个时间点,大量的缓存数据同时失效,导致大量请求直接访问数据库,从而造成数据库负载急剧增加,甚至引发数据库宕机等严重后果。

缓存雪崩产生原因:
  • 相同的过期时间:在某些系统中,可能存在大量缓存数据具有相同的过期时间,在这个过期时间点,这些缓存数据会同时失效。
  • 服务器宕机:整个缓存服务器宕机或者重启,导致所有缓存数据同时不可用。
  • 热点数据:某些热点数据的访问频率很高,一旦缓存失效,大量请求会直接访问数据库。
  • 并发访问:在高并发场景下,同时有大量请求等待获取相同的缓存数据,一旦缓存失效,就会导致大量请求穿透到数据库。
缓存雪崩的危害:
  • 数据库压力激增:大量请求直接访问数据库,导致数据库负载急剧增加,可能引发数据库性能问题甚至宕机。
  • 系统瘫痪:数据库压力过大可能导致系统响应变慢甚至不可用,影响整个系统的稳定性和可用性。
  • 数据不一致:在缓存失效和重新加载之间,可能导致数据库和缓存中数据不一致的情况发生。
避免缓存雪崩的方法:
  • 缓存数据分布均匀:设置不同的缓存数据过期时间,避免大量数据同时失效。
  • 多级缓存:采用多级缓存架构,即使某一级缓存失效,仍然可以从其他级别的缓存获取数据。
  • 热点数据预加载:定期刷新热点数据,避免缓存在高并发时突然失效,提前加载数据到缓存中。
  • 限流降级:对于缓存失效时的大量请求进行限流或者降级处理,保护数据库和系统免受冲击。
  • 32
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值