栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Redis常见缓存失效场景

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis常见缓存失效场景

Redis常见缓存失效场景 1. 穿透

关键字: 缓存和数据库都没有

我的理解:缓存在此时形同虚设,请求直接透传到数据库中,所以叫穿透

频繁请求缓存和数据库中都没有的数据,因为从数据库中查询到任何数据,所以不会写入缓存,导致缓存失去作用,请求可以直接穿透透传到数据库,造成数据库巨大的压力,请求过大时DB可能就挂了。

解决方案:

接口层增加校验:用户登录鉴权、请求参数过滤(如ID<=0的请求直接过滤掉)等;

短时间缓存空数据:可以将数据库中不存在的数据短暂缓存起来,比如: key:null,缓存过期时间设置为30秒,这样可以一定程度上缓解恶意用户使用同一个key暴力攻击数据库

布隆过滤器

2. 击穿

关键字:缓存无(过期),数据库有

我的理解:

此种场景有两个关键字:一个过期的key、高并发,重点在击这个字,被谁击,被高并发的请求击,就是一个已过期的key在同一时间点被高并发的请求所攻击,导致数据库的压力瞬间陡增,有挂掉风险。

在某一时刻,有大量并发请求打过来,它们同时去读缓存,缓存已过期没有获取到数据,然后又同时去数据库取数据,导致数据库压力陡增。

解决方案:解决掉两个关键字就可以解决问题

热点数据的缓存有效期设置为永不过期 —— 解决过期的问题

接口层增加限流、熔断、降级处理 —— 解决高并发的问题

使用互斥锁:在查询数据库的时候加上互斥锁,保证同一时间只有一个线程可以操作数据库 —— 解决高并发的问题

3. 雪崩

关键字:缓存无(过期),数据库有

雪崩=击穿的plus版(plus的地方是大量过期的key)

我的理解:

此种场景也是有两个关键字:大量过期的key、高并发,大量过期的key面对高并发的请求时,缓存失效,所有请求都打到数据库,导致数据压力瞬间陡增,有挂掉风险。

解决方案:也是解决掉两个关键字

热点数据的缓存有效期设置为永不过期 —— 解决过期的问题

过期时间随机化,尽量让过期时间均匀分布,避免同一时间存在大量过期的key —— 解决过期的问题

使用互斥锁:在查询数据库的时候加上互斥锁,保证同一时间只有一个线程或少量线程可以操作数据库 —— 解决高并发的问题

先写这么多,后续有想到其他更多的方面,再做补充!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/703451.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号