2022年01月07日整理发布:一起学习Redis缓存穿透、缓存击穿、缓存雪崩的原理和解决办法
2023-08-04 17:16:52 来源:互联网
推荐(免费):redis
缓存穿透:键中对应的缓存数据不存在,导致请求数据库造成数据库的双重压力。
缓存崩溃:redis过期后的瞬间,大量用户请求相同的缓存数据,导致所有这些请求都请求数据库,给数据库带来了双倍的压力。为了一把钥匙,
(相关资料图)
缓存雪崩:缓存服务器宕机或大量缓存集在一定时间内失效,导致所有请求都去数据库,数据库压力翻倍的情况。这是多把钥匙。
一、缓存穿透的解决方案
常用的方法可以使用布隆过滤器拦截数据。其次,还有一个解决方案,就是如果请求的数据为空,缓存空值,不会有穿透?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
类getPrizeList {
/**
* redis实例
* @var \Redis
*/
私有$ redis
/**
* @var字符串
*/
private $ redis _ key=" | prize _ list ";
/**
*到期时间
* @var int
*/
private $ expire=30
/**
* getPrizeList构造函数。
* @param $redis
*/
公共函数__construct($redis)
{
$ this-redis=$ redis;
}
/**
* @返回数组| bool |字符串
*/
公共函数提取
{
$ result=$ this-redis-get($ this-redis _ key);
if(!isset($ result)){ 0
//应该在这里进行数据库查询。
//如果查询结果不存在,缓存其默认的空数组。
$ result=[];
$ this-redis-set($ this-redis _ key,$result,$ this-expire);
}
返回$ result
}
}二、缓存崩溃的解决方案
使用互斥键,即当一个键过期时,多个请求来允许一个请求操作数据库,其他请求等待第一个请求成功返回结果后再请求。服务器端编程语言(Professional Hypertext Preprocessor的缩写)
类getPrizeList {
/**
* redis实例
* @var \Redis
*/
私有$ redis
/**
* @var字符串
*/
private $ redis _ key=" | prize _ list ";
/**
* @var字符串
*/
private $ setnx _ key=" | prize _ list _ setnx ";
/**
*到期时间
* @var int
*/
private $ expire=30
/**
* getPrizeList构造函数。
* @param $redis
*/
公共函数__construct($redis)
{
$ this-redis=$ redis;
}
/**
* @返回数组| bool |字符串
*/
公共函数提取
{
$ result=$ this-redis-get($ this-redis _ key);
if(!isset($ result)){ 0
if($ this-redis-setnx($ this-setnx _ key,1,$ this-expire)){ 0
//应该在这里进行数据库查询。
//$result=数据库查询结果;
$ this-redis-set($ this-redis _ key,$result,$ this-expire);
$ this-redis-del($ this-setnx _ key);//删除互斥体
} else {
//其他请求每10毫秒重新请求一次。
睡眠(10);
self:fetch
}
}
返回$ result
}
}三、缓存雪崩的解决方案
这种情况是由于多个密钥同时过期造成的数据库压力。一种方法可以在密钥到期时间的基础上增加随机次数,以扩展到期时间,降低缓存时间到期的重复率。另一种方法是锁定和排队,有点像上面的缓存崩溃的解决方案。然而,请求的数量太大,例如5,000个请求到来,4,999个请求等待。这势必是一个永久性的问题,不仅用户体验差,在分布式环境下更是雪上加霜。因此,复杂性很少用于高并发场景。最好的解决方案是使用缓存标签来确定标签是否过期,然后请求数据库,缓存数据的过期时间应该设置得比缓存标签的过期时间长。所以当一个请求操作数据库时,其他请求会获取最后一个缓存的数据?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
类getPrizeList {
/**
* redis实例
* @var \Redis
*/
私有$ redis
/**
* @var字符串
*/
private $ redis _ key=" | prize _ list ";
/**
*缓存标签密钥
* @var字符串
*/
private $ cash _ key=" | prize _ list _ cash ";
/**
*到期时间
* @var int
*/
private $ expire=30
/**
* getPrizeList构造函数。
* @param $redis
*/
公共函数__construct($redis)
{
$ this-redis=$ redis;
}
/**
* @返回数组| bool |字符串
*/
公共函数提取
{
$ cash _ result=$ this-redis-get($ this-cash _ key);
$ result=$ this-redis-get($ this-redis _ key);
if(!$ cash _ result){ 0
$this-redis-set($this-cash_key,1,$ this-expire);
//应该在这里进行数据库查询。
//$result=数据库查询结果,设置时间比cash_key长,这里设置为2倍;
$ this-redis-set($ this-redis _ key,$result,$ this-expire * 2);
}
返回$ result
}
}以上就是一起学习Redis缓存穿透、缓存击穿、缓存雪崩的原理和解决方案的详细内容!
来源:php中文网站
关键词:
为你推荐
陕西两万五千吨市政桥梁完成“转身”
兰州40家A级旅游景区暂时关闭 开放时间暂定
北京丰台初步排查确诊病例密接、次密接258人 组织3万余
四川95岁战斗英雄何开仲有个心愿:想见见山东老战友
增产快!电力生产加速 能源供应偏紧将得到缓解
夏粮和早稻实现双增产 前三季度农林牧渔业增加值同比增
云南瑞丽江桥“守门员”:疫情防控不漏一人
“久病床前真孝子” 浙江男子照顾瘫痪母亲十载
黑龙江:儿童福利机构养育儿童保障标准提至1750元
山西新绛南关村民:因洪水离开家的日子
“十年磨一剑” 黑色矸石山终闻花果香
国家一级保护动物猎隼受伤 内蒙古警方送医救治
一罪犯强行脱逃下落不明 吉林省吉林监狱发布悬赏通告
涉案金额逾3000万 广西一“洗钱”团伙受审
青藏高原有雨雪天气 西南地区江南华南等地有明显降雨
湖南长沙县发现1例外省输入新冠肺炎确诊病例
青海互助:打造全国最大高原草莓种苗繁育中心
照片修复师:每修复一张照片越珍惜与亲人相处的时光
贵州率先在中国实现地质矿产勘查全过程数字化
浙江岱山通报一船沉没 2人获救11人失联
推荐内容
- 陕西两万五千吨市政桥梁完成“转身”
- 河北邯郸发生天然气泄漏事故致3人死亡
- 兰州40家A级旅游景区暂时关闭 开放时间暂定
- 湖北警方打掉两跨省“跑分”洗钱犯罪团伙
- 新冠肺炎疫情下如何保护孩子?张文宏建议设儿童专
- 海南儋州出现1例治愈后的境外输入病例复阳人员
- 男童脊柱侧弯压迫心肺 医生耗时7小时矫正
- 宁夏将开展18岁以上重点人群加强免疫接种工作
- 北京新增1例京外关联本地确诊病例 病例所在街道
- 北京丰台初步排查确诊病例密接、次密接258人 组
- 四川95岁战斗英雄何开仲有个心愿:想见见山东老战
- 增产快!电力生产加速 能源供应偏紧将得到缓解
- 夏粮和早稻实现双增产 前三季度农林牧渔业增加值
- 云南瑞丽江桥“守门员”:疫情防控不漏一人
- 宁夏吴忠核酸阳性者已确诊
- 宁夏吴忠市发现一例外省来吴核酸检测阳性人员
- “久病床前真孝子” 浙江男子照顾瘫痪母亲十载
- 内蒙古额济纳旗5名确诊病例行动轨迹:在同一饭店
- 北京疾控:近期去过这些地方的相关人员请主动报备
- 北京新增1例京外关联输入本地确诊病例
- 增强为民服务能力——做群众最盼事 解群众最难题
- 魏复盛:干一些平凡的实事
- 中缅边境畹町海关查获涉嫌走私海马干4381尾
- 黑龙江:儿童福利机构养育儿童保障标准提至1750元
- 山西新绛南关村民:因洪水离开家的日子
- “十年磨一剑” 黑色矸石山终闻花果香
- 适老化的游戏准备好了吗?电子游戏别忽视老年人
- 国家一级保护动物猎隼受伤 内蒙古警方送医救治
- 西安鄠邑发布2名密接者活动轨迹
- 宁夏吴忠发现一例外省来吴核酸检测阳性人员
- 上海籍阳性夫妻内蒙古行程涉及3个景区、1个民宿、
- 内蒙古额济纳旗启动IV级应急响应 排查出密接者197人
- 内蒙古二连浩特市两地调整为中风险地区
- 泥若二审宣判来了 知名游戏主播山泥若被判刑3年
- 河北邯郸发生天然气泄漏 3人窒息死亡
- 北京丰台报告1例甘肃来京人员新冠病毒核酸检测阳性
- 内蒙古二连浩特两个社区调整为中风险地区
- 一罪犯强行脱逃下落不明 吉林省吉林监狱发布悬赏
- 兰州6人核酸检测呈阳性 主城区局地调整为中风险区
- 涉案金额逾3000万 广西一“洗钱”团伙受审
油气
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10