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

本文探讨了缓存一致性问题,包括缓存击穿(热点数据过期并发查询)、缓存穿透(恶意查询不存在数据)和缓存雪崩(集群失效)。提供了互斥锁、永不过期策略、布隆过滤器、分布式过期时间等解决方法。
摘要由CSDN通过智能技术生成
缓存击穿

  缓存击穿指的是某个热点数据在缓存中过期后,短时间内大量并发请求直接到数据库,导致数据库压力剧增。典型场景是对于一个设置了过期时间的热点key,当缓存失效的瞬间,大量请求恰好并发,所有请求都无法从缓存中获取到数据,只能去查询数据库,直接作用在数据库上。

解决方法
  • 互斥锁:当请求发现缓存失效时,不是立即查询数据库,而是先尝试获取一个互斥锁,只能拿到锁的请求才能去查询数据库,其他请求则等待锁释放。这样可以确保只有一个请求去数据库查询,查询完成后回填缓存并释放锁,其他请求可以从缓存中获取数据。
  • 永不过期:对于某些热点数据,可以设置为永不过期,通过在每次获取缓存数据时检查数据的实效性,并进行定期刷新。
缓存穿透

  缓存穿透指的是查询的数据根本不存在与数据库中,因此也不会存在于缓存中。恶意攻击或者大量不存在的请求反复查询缓存和数据库,使得数据库承受大量无效查询压力。

解决方法
  • 布隆过滤器(Bloom Filter):在请求查询缓存之前,先通过布隆过滤器判断数据是否存在可能性,如果判断数据一定不存在,则直接返回,避免对数据库的无效查询。
  • 空值缓存:即使查询数据库返回为空,也将空值缓存起来,设定一个较短的有效期,短时间内重复请求可以迅速返回,同时也防止了攻击者反复请求不存在的数据对数据库造成压力。
缓存雪崩

  缓存雪崩指缓存集群大面积失效或宕机,所有请求被迫直接访问数据库,导致数据库压力过大,服务可能崩溃。这种情况可能由缓存服务器集体故障、缓存统一过期等多个key同时失效导致。

解决方法
  • 分布式的过期时间:为不同数据设置随机的过期时间,避免大量缓存同一时刻失效。
  • 备份和主从复制:使用主从复制或多副本部署,确保即使部分缓存节点失效,也有备份节点可以继续提供服务。
  • 限流降级:设置熔断或限流策略,当请求激增时,可以暂时阻止部分请求,或者引导到备选方案。
  • 预加载和缓存刷新:在缓存失效前提前刷新缓存,或者在服务启动时预加载热点数据到缓存中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值