Redis玩家积累的血泪经验

警告
本文最后更新于 2023-09-19,文中内容可能已过时。

写入数据限速

写入数据限速,尤其是在并发写入的情况下。

一般情况下,单线程程序没法做到打满 Redis,但是如果你写了一个并发程序调用 Redis 就需要注意了,我曾经写过一个并发程序短时间内导致 Redis CPU 负载爆增 30% 以上,还好并发数没有设置太高,否则可以去领表了。

评估数据总体规模

评估数据规模,以防止 Redis 内存被打满。

曾经有一次上线了代码后,Redis 内存占用爆增 20%,可以预见我的代码还没跑完,Redis 内存就会被打满。好在我及时停止了程序,优化代码重新上线,避免了这次事故。

评估单个Key的数据规模

评估单个 Key 的数据规模,以防止 Redis 阻塞。

曾经接手过一个 BUG,问题也不大,就是 HTTP 接口偶尔超时。分析后发现该接口会使用 HGETALL 命令获取 Redis 数据,在碰到某个大 Key 时就会导致接口超时。

谨慎使用HGETALL这种命令

单单一个大 Key 还不足以导致 Redis 阻塞,还得搭配上 HGETALL、SMEMBERS 这种返回所有数据的命令。

比如上文的 BUG,我采取的临时方案就是把 HGETALL 命令更换为 HSCAN 命令。

预防单个Key的热度过大

某个 Key 的热度过大,可能会导致 Redis 集群某台主机被打挂,甚至有可能请求打到数据库,造成更大的事故。

这个情况我没遇到过,毕竟公司流量没微博那么高,也不会三天两头爆出吴亦凡被抓这种热点事件。笑~


原文链接:Redis玩家积累的血泪经验

Buy me a coffee~
室长 支付宝支付宝
室长 微信微信
0%