线上Redis的两次事故

背景:
1、Redis一万的QPS;
2、Redis的流量32M/s;
3、购买的阿里云Redis内存16G;
4、laravel框架

过程:
事故一: Redis达到16G上限后,把volatile-lru策略更换成allkeys-lru策略, 坚持了一天后,再次事故。(为什么的更换新策略,之前一个项目,同样的策略一直运行非常稳定)
解决方式:
1)没有其它好的解决办法, 为了稳定性, 内存扩容至32G。
2)查找Redis内存上升快的原因,Cache::tags生成多份一样的数据, 请大家谨慎使用。

事故二:Redis流量有几天一直100%, 但是一直没有出现问题。结果突然某个时间节点出现事故。
解决方式:
1)流量扩容至90M/s,项目恢复稳定,项目流量一直保持在85M/s。
2) 优化PHP代码,对高频请求value做字节降小操作。找到一个频率请求非常高的接口,对它优化后流量后从85M/s下降至40M/s。

事后讨论结论:
1)前端部分数据本地化;
2)合并API请求;
3)减小非必要的API请求;
4)PHP对Redis必须设置过期时间,并且优化Cache::tags的使用;

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 9

优化 Cache::tags 的使用 ---- 这个具体是怎么做的?另外一直不太明白Cache::tags的使用场景,redis key本身不是可以区分了吗 设计好的话

2年前 评论
seth-shi 2年前
Cooper 2年前
huangYX (楼主) 2年前
Buffett-Cai 2年前
seth-shi 2年前

到达量级可以不用 PHP 序列化, 会增多内存. 考虑存自定义格式. 不过最简单的方法上集群增加内存就行了

2年前 评论
huangYX (楼主) 2年前
seth-shi (作者) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!