eIT.com.cn 2023/3/16 16:49:39 阅读 4 次
缓存击穿是指缓存中没有的数据,而查询非常频繁的数据,导致大量的请求落到了数据库上,因此很容易导致数据库连接数暴增,甚至导致宕机。 下面是 PHP 解决缓存击穿问题的一般解决方案:
该代码逻辑如下:1.根据指定 Key 从 Redis 中获取数据; 2.如果数据不存在,设置一个缓存互斥锁,防止大量并发访问 DB,再次从 DB/ 获取数据; 3.如果获取到缓存锁,则从 DB 中获取数据,并将数据写入 Redis 中; 4.如果获取不到缓存锁,则说明其他进程已经获取到了缓存锁,等待一段时间后重试,重新获取数据即可。 解决缓存击穿的方法有很多,以上只是其中一种通用的 PHP 解决方法,实际应用中需要结合具体情况选择合适的解决方案。 以下是基于 Redis 分布式锁和补偿任务的代码示例:
补偿任务相关的代码如下:
以上代码示例中,如果获取缓存的进程都无法获得锁并写入缓存,则使用补偿任务异步处理任务,并在后台异步将查询结果写入缓存。补偿任务的处理逻辑与业务逻辑相似,只是将数据的写入缓存操作改为异步操作,并放入任务队列中。后台任务处理进程会不断地从任务队列中获取任务,并进行处理。 文章来源:刘俊涛的博客 欢迎关注公众号、留言、评论,一起学习。 若有帮助到您,欢迎捐赠支持,您的支持是对我坚持最好的肯定(_) 你要保守你心,胜过保守一切。 本文来自,作者:刘俊涛的博客,转载请注明原文链接:https://www./lovebing/p/17223016.html |
• CodeIgnitor 3.0.x 之 db 类实现机制 (2023/3/27 17:06:15)
• 小编亲身实操,教你配置phpstorm与xdebug的调试配置,不成功你骂我 (2023/3/23 14:12:42)
• 前端转向PHP进阶之路 (2023/3/21 22:42:38)
• fpm模式下读取到is_cli为何为true (2023/3/19 19:30:13)
• 一次 Hyperf 注解失效问题分析 (2023/3/18 21:22:55)
• TP 判断IP是否在国内 (2023/3/17 23:49:51)
• windows 系统下 workerman 在同一个运行窗口中开启多个 websocket 服务 (2023/3/17 12:57:39)
• php解决缓存击穿的问题 (2023/3/16 16:49:39)
• FastAdmin的API接口生成器插件,使用validate验证时报错等问题。 (2023/3/14 6:08:24)
• php之配置和选择工具 (2023/3/10 18:09:38)
HP-Unix | SAP Simple Finance - 简单财务 | PPT/PowerPoint | 存储解决方案 | 内容营销 | 移动营销 | C标准库参考 | 面向对象的Python | 相关技巧 | 局域网 | 网络分析 | Java国际化 | SAP Ariba | XML DOM | Apache Pig | Laravel | SAP Smart Forms | MySQLi | ASP.NET MVC | XStream
合作媒体与友情链接 |
生活常识小贴士 | 软件开发教程 | 智慧城市生活网 | 息县通生活服务[移动版] | 息县商圈[移动版] | 美食菜谱 |
健康养生 | 法律知识 | 科技频道 | 电影影讯 | 留学考研学习 | 星座生肖|解梦说梦 |
关于我们 | 联系我们 | 合作媒体 | 使用条款 | 隐私权声明 | 版权声明 |
Copyright © 2023 eIT.com.cn. All Rights Reserved. | 豫ICP备2022012332号 |