【Redis】缓存穿透,缓存击穿,缓存雪崩

0、概述

最近在复习redis的时候,发现对redis的一些概念很模糊,今天来梳理一下缓存穿透,缓存击穿,缓存雪崩这三个概念。

 

1、缓存穿透 

概念:所谓的缓存穿透,简单来讲就是查询某些不存在的key时,缓存和数据库查询结果都为空,而空的结果又不被缓存起来,而导致每次查询都去请求数据库层的情况。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。

解决方案:常见的两种方法是缓存空数据和使用布隆过滤器。

1.缓存空数据

当第一次查询数据库时,若数据不存在,返回空数据时将其写入缓存,后续查询就不必再去查询数据库了。

2.布隆过滤器拦截

访问缓存之前,先从布隆过滤器中验证数据是否存在。将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。

 

2、缓存击穿

概念:是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。和“缓存雪崩”的区别在于这里针对某一key缓存,后者则是很多key。

解决方案:1.使用互斥锁

                 2.将一些热点key设置成永不过期

 

3、缓存雪崩

概念:缓存同一时间大面积的失效,这个时候又来了一波请求,结果请求都怼到数据库上,从而导致数据库连接异常。

解决方案:在每个缓存的过期时间加上一个随机时间,从而使得每个key的缓存失效时间分散开,不让它们在同一时刻失效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值