缓存穿透、击穿、雪崩以及解决方案

前言

实际运用场景中,经常遇到高并发,尤其在秒杀、热点数据,某一时刻产生大量并发请求,如果直接请求数据库,会造成数据库瘫痪,造成整个服务不可用,为了避免这种情况发生,经常用到缓存技术,来缓冲高并发请求。

引入缓存技术,能够缓解数据库压力,提供系统性能,系统更加健壮。但是同时缓存技术会引发缓存穿透、击穿、雪崩,这些情况需要提前考虑好,做好防护。以redis 为例,讲解下如何发生的,该如何处理

缓存击穿

  • 概念

某一瞬时大批量请求集中访问一个key(上百上千万请求), 如果此时缓存过期失效,缓存中数据不存在, 数据库存在,所有请求瞬间集中到数据库,会造成数据库瘫痪,这就是内存击穿

  • 解决方法
  1. 设置热点数据永不过期
  2. 添加互斥锁:枷锁之后,保证每一个key,只有一个线程去执行,其他线程等待。

缓存穿透

  • 概念

请求的数据在内存不存在,去数据库查询,查到写入缓存。如果数据库中也不存在,无法写入缓存,其他请求会继续去数据库查询,这就是缓存穿透。总结起来就一话:缓存和数据库都没有数据

  • 解决方案

使用布隆过滤器布隆过滤器

缓存雪崩

  • 概念

某一时刻缓存集群失效,如reds 挂了,造成缓存雪崩。雪崩后果很严重

  • 解决方案
  1. Redis的高可用。 redis可能挂掉,这个时候第一保证高可用。
  2. 限流降级,缓存失效后的处理,(加锁,返回预定的对象)
  3. 数据预热, 在正式的部署之前,先将这批数据放入到redis缓存中,假设即将发生高并发的情况,这个时候设置不同的过期时间。保证部分节点可用
  4. 在进行redis数据写入时引入sync同步代码块(并发写请求个数=该业务的集群节点数)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值