当前位置:
首页
文章
前端
详情

Redis 缓存穿透、缓存雪崩的概念及其预防

缓存穿透

【什么是缓存穿透】

频繁查询不在缓存中的数据,给原本被缓存保护的系统过大压力。

【为什么会发生缓存穿透】

1. 程序没写好;

2. 恶意攻击。

【怎样防止缓存穿透】

1. 在对 key 进行查询之前,先做初步判断,如果 key 一定不存在(例如,对某表的缓存,key 一定由数字组成,那么包含非数字的key一定是不存在的),则不查缓存或数据库,直接给结果;

2. 对于攻击 key 范围小的情形,未命中缓存,且未在数据库中查询到的情形,也放入缓存,用一个特殊的 value 表示此 key 不存在。

缓存雪崩

【什么是缓存雪崩】

一大批 key 几乎同时失效,给原本被缓存保护的系统过大压力。

【怎样预防缓存雪崩】

1. 缓存失效后,通过加锁或任务队列来限制读取后端系统的并发数;

2. 给过期时间增加随机值:过期时间由原来的 T 改为 T+R,其中 R 为一个合理范围内的随机数,使得缓存不会大批量同时失效;

3. 做二级缓存,A1 为原始缓存,A2 为拷贝缓存,A1 失效时,可以访问 A2,A1 缓存失效时间设置短一些,A2 设置长一些。

免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。