什么是缓存穿透?如何避免?什么时候缓存雪崩?如何避免?
缓存穿透
一般来说,缓存系统会通过key去缓存查询,如果不存在对应的value,就会去后端系统查询(例如DB),这个时候如果一些恶意请求到来,就是故意查询不存在的key,某一个时刻的请求量过大,就会对后端系统造成很大的压力,这个就叫做缓存穿透。
缓存击穿
是指某一个热点key,有着大并发请求,如果这个热点key失效,这个时候就会透过redis直接访问DB,这个过程就缓存击穿
如果避免?
1、对查询结果为空的情况也进行缓存,缓存时间设置段点,或者该key对应的数据insert了之后清理缓存
2、对一定不存在的key进行过滤,可以把所有可能存在的key放到一个大的Bitmap中,查询时通过bitmap过滤
缓存雪崩
当缓存服务器启动或者大量缓存集中在某个时间段失效,这个时候会给后端系统(db)带来很大访问压力,导致系统崩溃,这个过程叫做缓存雪崩。
如果避免?
1、在缓存失效后,通过加锁或者队列来控制读取数据库写缓存的线程数量。比如对某一个key只允许一个线程查询访问数据、写缓存,其他线程等待。
2、做二级缓存,一级缓存时间短点,二级缓存时间长久,可以先访问二级缓存
3、对于缓存key,设置不同的过期时间,让缓存失效的时间相对均衡点。
0 Comments