php缓存穿透、缓存击穿、缓存雪崩区别和解决方案
发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,本篇内容介绍了"php缓存穿透、缓存击穿、缓存雪崩区别和解决方案"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够
千家信息网最后更新 2025年01月27日php缓存穿透、缓存击穿、缓存雪崩区别和解决方案
本篇内容介绍了"php缓存穿透、缓存击穿、缓存雪崩区别和解决方案"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一、缓存穿透
缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,这时的用户很可能是攻击者,攻击会导致数据库压力过大。
解决方案:
接口层增加校验,如用户鉴权校验,timestamp的时间差判断,IP和用户ID的禁用逻辑等
从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击
二、缓存击穿
缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力
解决方案:
设置热点数据永远不过期。
加互斥锁,互斥锁参考代码如下:(逻辑代码,不可运行)
protected function getData() { ¦ $ret = $this->getRedis($key); ¦ if ($ret == null) { ¦ ¦ try { ¦ ¦ ¦ if (lock.get) { ¦ ¦ ¦ ¦ $ret = $this->getMysql($key); ¦ ¦ ¦ ¦ if ($ret != null) { ¦ ¦ ¦ ¦ ¦ $this->setRedis($key, $ret); ¦ ¦ ¦ ¦ } ¦ ¦ ¦ } ¦ ¦ } catch { ¦ ¦ ¦ lock.unlock; ¦ ¦ } ¦ } ¦ return $ret; }
三、缓存雪崩
缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。和缓存击穿不同的是,缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。
解决方案:
缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。
设置热点数据永远不过期。
"php缓存穿透、缓存击穿、缓存雪崩区别和解决方案"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
缓存
数据
数据库
时间
用户
方案
解决方案
雪崩
穿透
压力
攻击
不同
热点
代码
内容
同时
情况
更多
知识
逻辑
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器操作都有什么
服务器管理口不同系统进入不了
网络安全大赛判断题
网络安全等级保护安全测评
网络技术3级与数据库3级
通化网络安全法
网络技术的专科
邯郸软件开发公司图标
北大法宝数据库培训
软件开发c段
枣庄软件开发培训班
湖北数据网络技术价目表
广州番禺互联网科技学校
最流行的软件开发模型是什么
星耀网络技术有限公司怎么样
数据库原理与应用的英文
万方数据库论文检测原理
堤防水闸基础数据数据库
比特币用的服务器
网络安全行征文
plsql填写数据库地址
西瓜星球服务器什么时候开服
没有数据库怎么练习sql
软件开发过程活动质量定义
erp分销软件开发服务
服务器导轨上架
数据库标识码是什么
网络安全宣传周活动周简报
数据库后面有置疑什么意思
网络安全系统报价多少