千家信息网

Redis中缓存穿透、击穿、雪崩是什么

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍Redis中缓存穿透、击穿、雪崩是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!缓存雪崩在某一时刻,大量的key失效,用户大量请求直接请求数据库,导致数据库
千家信息网最后更新 2026年11月04日Redis中缓存穿透、击穿、雪崩是什么

这篇文章主要介绍Redis中缓存穿透、击穿、雪崩是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

缓存雪崩

在某一时刻,大量的key失效,用户大量请求直接请求数据库,导致数据库宕机。此时的Redis形同虚设,用户大量请求都命中不了,导致数据库服务器压力过大,Redis本身是用来减少数据库的压力,那么此时如何解决呢?

缓存雪崩解决方案

1.随机设置缓存的过期时间,以防同时过期大量缓存数据。

var time = Math.random()*10000;>setex name time mango

2.如果是在集群环境中,将热点数据均匀分布在不同的缓存数据库中。

3.也可以热点数据永不过期,如果有数据更新就直接更新redis即可。

>set name mango>set name zhangsan    #修改key的value值
缓存击穿

缓存里面的一个key非常的火爆,在某一时间这个key刚好过期,大并发数据量击穿了缓存直接请求数据库,导致数据库压力过大,严重情况会导致数据库崩溃,这就是缓存击穿。例如:微博热点新闻,某个明星又出绯闻了,然后大量的粉丝刷文章刷评论,一时间热火朝天,突然请求这条微博的缓存过期,那么大量的请求直接涌向数据库,建立大量连接,数据库还没反应过来就崩了。

缓存击穿解决方案

1.设置这个key永远不会过期

>hset 156486453215 title "mango上热搜" describe "mango太帅了"

2.程序控制请求数据库的次数,比如添加互斥锁、延时请求(1s后请求)

public static string GetData(string key){    //从redis查数据    string result = RedisHelper.GetDataByKey(key);    if(string.IsNull(result))    //获取到空数据    {        lock(obj)    //锁定资源        {            //从数据库获取数据            result = DB.GetDataByKey(key);            //校验            if(!string.IsNull(result))            {                RedisHelper.SetData(key,result);    //缓存且返回                return result;            }        }        Thread.sleep(1000);    //先睡一觉    }}

意思大概是这么个意思,代码的话,哈哈哈,明白意思最重要。

3.服务器熔断、降级,限制每个用户的访问次数,并且如果获取不到数据即返回一个固定的推荐页面。

缓存穿透

用户不断地请求一个缓存没有并且数据库也没有的数据,服务器疯狂的跟数据库建立连接从而压倒数据库。比如说:根据产品id获取产品详情的接口,那么我用一个id=-1去请求,那肯定是获取不到任何数据的。一般这样的情况有可能服务器遭到了恶意攻击。

缓存穿透解决方案

1.在用户请求的接口层增加一些校验,例如:用户鉴权校验、参数传值校验等不合法的参数请求即直接返回。开发者应该保持一个悲观的态度,不要相信任何客户端因为计算机本身不知道操作者是谁,任何参数都应该考虑到。

if(id < 0){    return("参数不合法");}

2.使用Redis高级数据结构布隆过滤器(Redis如何实现刷抖音不重复-布隆过滤器(Bloom Filter)),他就是检测数据库中是否存在该key,不存在就直接返回即可。

>bf.mexists user(integer) 0    #如果不存在,则return

写到最后

缓存的雪崩、击穿、穿透其实都是客户端请求直接越过缓存直接请求数据库,但是他们从意义上来讲又有微妙的不同。大家一定要理解这三者是如何产生的,才能对症下药。

在用户请求的时候我们可以配置服务器的熔断+降级,保证服务器不会崩溃,用户请求频繁可以限制它的请求次数,或者可以牺牲部分用户的性能。

一般来讲数据到达一定量后,为了保证服务器的高可用,我们会对redis建立集群或者是主从+哨兵模式,避免redis直接挂掉没有任何的机器代替。也可以使用redis持久化,如果Redis崩溃,重启后且恢复数据

当然,我们也要保证数据库本身具有一定的抗压性,比如我们添加一主多从的数据库,保证数据库不会那么容易崩溃。

以上是"Redis中缓存穿透、击穿、雪崩是什么"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

数据 数据库 缓存 用户 服务器 服务 雪崩 穿透 参数 保证 压力 意思 方案 次数 热点 解决方案 不同 产品 内容 客户 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 小米移动互联网科技园 喔噻互联网科技有限公司 深圳互联网科技公司 易互联网科技有限公司 善班互联网科技有限公司 互联网科技logo设计 人人互联网科技是培训 安控科技rtu产品工业互联网 新华互联网科技2019 福州新华互联网科技学校 知乎 团飞科技与伯堂互联网服务平台 互联网科技有哪些公司 宝灵互联网科技有限公司 坤平互联网科技 米聚互联网科技南京有限公司排面 伊宁互联网科技做什么的 互联网营销推广黑科技 福仕德教育科技互联网 好易买互联网科技 互联网科技品牌 礼当家互联网科技 百单互联网科技有限公司 中国互联网有什么科技含量 东莞新华互联网科技学校 广州新华互联网科技学校电竞方面 威龙国际互联网科技公司 特约风豹互联网科技为什么扣费 众安科技工业互联网合作 黑科技 体验场景 互联网大会 上海万顺科技互联网有限公司招聘
0