redis缓存击穿和穿透的区别
时间: 2024-09-08 11:03:01 浏览: 54
Redis缓存穿透,缓存击穿和缓存雪崩
Redis缓存击穿和缓存穿透是两种不同类型的缓存问题,它们在发生原因和处理方法上有所区别。
缓存击穿是指一个热点key,它在Redis中存在,但是在某一时刻突然失效了,而这时候大量的请求都会直接访问数据库,造成数据库的负载压力激增。这种情况往往发生在使用定时过期策略时,某个热点key突然过期导致的。
缓存穿透则是指查询一个根本不存在的数据,比如恶意攻击者利用不存在的数据频繁请求,由于缓存中没有这个数据,每次请求都会直接访问数据库,导致数据库压力过大。
对于缓存击穿,通常的解决方法是:
1. 设置热点数据永不过期,或使用互斥锁(mutex lock)在查询到Redis不存在时,让一个线程去数据库查询并更新缓存,其他线程则等待。
2. 使用双层缓存策略,一个缓存永不过期,另一个缓存则根据业务需求设置过期时间。
对于缓存穿透,处理方法包括:
1. 布隆过滤器(Bloom Filter),在缓存之前通过布隆过滤器判断数据是否存在,不存在则直接返回,避免对数据库的查询。
2. 接口层增加校验,如参数合理性校验,防止恶意请求。
3. 对于返回的数据为空的情况,也缓存一个空对象或特殊值,设置较短的过期时间。
阅读全文