温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-12-20 11:42:06 来源:亿速云 阅读:157 作者:小新 栏目:大数据

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

缓存雪崩

在某一时刻,大量的key失效,用户大量请求直接请求数据库,导致数据库宕机。此时的Redis形同虚设,用户大量请求都命中不了,导致数据库服务器压力过大,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刚好过期,大并发数据量击穿了缓存直接请求数据库,导致数据库压力过大,严重情况会导致数据库崩溃,这就是缓存击穿。例如:微博热点新闻,某个明星又出绯闻了,然后大量的粉丝刷文章刷评论,一时间热火朝天,突然请求这条微博的缓存过期,那么大量的请求直接涌向数据库,建立大量连接,数据库还没反应过来就崩了。

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

缓存击穿解决方案

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去请求,那肯定是获取不到任何数据的。一般这样的情况有可能服务器遭到了恶意攻击。

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

缓存穿透解决方案

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

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

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

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

写到最后

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

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

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

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

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI