随着用户的增长,用户的请求也越来越频繁,为了保证服务器在高并发的情况能正常提供服务,我们首先引入了缓存Redis,减少数据库的压力和数据的安全性同时提高了接口反应效率,解决了用户的请求直接与数据库建立连接。 但是在使用Redis的时候,随之而来的问题也会越来越多,有些请求甚至会直接越过Redis直接请求数据库,今天我们来了解Redis数据库经常会谈及的问题缓存雪崩、缓存击穿、缓存穿透。 缓存雪崩 在某一时刻,大量的key失效,用户大量请求直接请求数据库,导致数据库宕机。此时的Redis形同虚设,用户大量请求都命中不了,导致数据库服务器压力过大,Redis本身是用来减少数据库的压力,那么此时如何解决呢? 缓存雪崩解决方案 1.随机设置缓存的过期时间,以防同时过期大量缓存数据。 2.如果是在集群环境中,将热点数据均匀分布在不同的缓存数据库中。 3.也可以热点数据永不过期,如果有数据更新就直接更新redis即可。 缓存击穿 缓存里面的一个key非常的火爆,在某一时间这个key刚好过期,大并发数据量击穿了缓存直接请求数据库,导致数据库压力过大,严重情况会导致数据库崩溃,这就是缓存击穿。例如:微博热点新闻,某个明星又出绯闻了,然后大量的粉丝刷文章刷评论,一时间热火朝天,突然请求这条微博的缓存过期,那么大量的请求直接涌向数据库,建立大量连接,数据库还没反应过来就崩了。 缓存击穿解决方案 1.设置这个key永远不会过期 2.程序控制请求数据库的次数,比如添加互斥锁、延时请求(1s后请求) 意思大概是这么个意思,代码的话,哈哈哈,明白意思最重要。 3.服务器熔断、降级,限制每个用户的访问次数,并且如果获取不到数据即返回一个固定的推荐页面。 缓存穿透 用户不断地请求一个缓存没有并且数据库也没有的数据,服务器疯狂的跟数据库建立连接从而压倒数据库。比如说:根据产品id获取产品详情的接口,那么我用一个id=-1去请求,那肯定是获取不到任何数据的。一般这样的情况有可能服务器遭到了恶意攻击。 缓存穿透解决方案 1.在用户请求的接口层增加一些校验,例如:用户鉴权校验、参数传值校验等不合法的参数请求即直接返回。开发者应该保持一个悲观的态度,不要相信任何客户端因为计算机本身不知道操作者是谁,任何参数都应该考虑到。 2.使用Redis高级数据结构布隆过滤器(Redis如何实现刷抖音不重复-布隆过滤器(Bloom Filter)),他就是检测数据库中是否存在该key,不存在就直接返回即可。 写到最后 缓存的雪崩、击穿、穿透其实都是客户端请求直接越过缓存直接请求数据库,但是他们从意义上来讲又有微妙的不同。大家一定要理解这三者是如何产生的,才能对症下药。 在用户请求的时候我们可以配置服务器的熔断+降级,保证服务器不会崩溃,用户请求频繁可以限制它的请求次数,或者可以牺牲部分用户的性能。 一般来讲数据到达一定量后,为了保证服务器的高可用,我们会对redis建立集群或者是主从+哨兵模式,避免redis直接挂掉没有任何的机器代替。也可以使用redis持久化,如果Redis崩溃,重启后且恢复数据 当然,我们也要保证数据库本身具有一定的抗压性,比如我们添加一主多从的数据库,保证数据库不会那么容易崩溃。 一名正在抢救的coder 笔名:mangolove ImapBox地址:https://blog.csdn.net/mango_love GitHub地址:https://github.com/mangoloveYu
var time = Math.random()*10000;
>setex name time mango
>set name mango
>set name zhangsan #修改key的value值
>hset 156486453215 title "mango上热搜" describe "mango太帅了"
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); //先睡一觉
}
}
if(id < 0)
{
return("参数不合法");
}
>bf.mexists user
(integer) 0 #如果不存在,则return
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算