什么是缓存穿透?如何避免?什么时候缓存雪崩?如何避免?

Published by xiaosixi on

缓存穿透

一般来说,缓存系统会通过key去缓存查询,如果不存在对应的value,就会去后端系统查询(例如DB),这个时候如果一些恶意请求到来,就是故意查询不存在的key,某一个时刻的请求量过大,就会对后端系统造成很大的压力,这个就叫做缓存穿透。

缓存击穿

是指某一个热点key,有着大并发请求,如果这个热点key失效,这个时候就会透过redis直接访问DB,这个过程就缓存击穿

如果避免?

1、对查询结果为空的情况也进行缓存,缓存时间设置段点,或者该key对应的数据insert了之后清理缓存

2、对一定不存在的key进行过滤,可以把所有可能存在的key放到一个大的Bitmap中,查询时通过bitmap过滤

缓存雪崩

当缓存服务器启动或者大量缓存集中在某个时间段失效,这个时候会给后端系统(db)带来很大访问压力,导致系统崩溃,这个过程叫做缓存雪崩。

如果避免?

1、在缓存失效后,通过加锁或者队列来控制读取数据库写缓存的线程数量。比如对某一个key只允许一个线程查询访问数据、写缓存,其他线程等待。

2、做二级缓存,一级缓存时间短点,二级缓存时间长久,可以先访问二级缓存

3、对于缓存key,设置不同的过期时间,让缓存失效的时间相对均衡点。

Categories: redis

xiaosixi

本人IT码农一枚,从事java企业级应用开发,目前就职于深圳某某公司,热衷于对技术的研究和热爱。本网站主要记录生活、工作上所发生所看的,可能大多来自互联网,如有版权问题,请联系,我会及时处理。

0 Comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注