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

本文深入探讨了缓存系统中常见的三个问题:缓存穿透、缓存击穿和缓存雪崩。解释了这些问题的发生原因及对系统的影响,并提出了有效的解决方案,包括缓存空数据、使用布隆过滤器、互斥锁、永不过期策略和随机过期时间等。

0、概述

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

 

1、缓存穿透 

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

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

1.缓存空数据

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

2.布隆过滤器拦截

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

 

2、缓存击穿

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

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

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

 

3、缓存雪崩

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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值