线上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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 9

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

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

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

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

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