php缓存穿透、缓存击穿、缓存雪崩区别和解决方案
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,本篇内容介绍了"php缓存穿透、缓存击穿、缓存雪崩区别和解决方案"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够
千家信息网最后更新 2024年09月22日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安全错误
数据库的锁怎样保障安全
酒店管理系统用什么软件开发
国内网络安全股票有哪些
游戏软件属于软件开发吗
服务器软件分类
高级数据库技术面试题
旅游数据库的的视图
高层协议软件开发工程师
表单怎么存在数据库
网络存储服务器EVS
pubchem数据库分析
戴尔服务器超融合一体机
东安区钟珀软件开发店
远程sql服务器安全
Nba数据库火箭队
网络安全知识例子
南京软件开发工资
重庆游族网络技术有限公司
合肥动态服务器
管理服务器怎么打开方式
服务器搬迁价格
中兴软件开发前景咋样
日本小说软件开发
网络安全与信息对抗的区别
游戏软件属于软件开发吗
江西林强网络技术有限公司
网络存储服务器EVS
麒麟软件开发工具
海得 容错服务器
异构服务器概念
一个数据库可以没有事务日志文件