← 返回首页

Redis 如何处理大 Key (BigKey) 和 热 Key (HotKey)?

大 Key (BigKey):

定义:Value 过大(如 String > 10KB, Hash/List > 10000 元素)。

危害:网络阻塞(单次传输慢)、阻塞单线程(删除/序列化耗时)、内存不均。

发现:redis-cli --bigkeys 或 RDB 分析工具。

解决:

拆分:大 Hash 拆成多个小 Hash(如 user:1 -> user:1_1, user:1_2)。

异步删除:使用 UNLINK 命令替代 DEL(非阻塞删除)。

压缩:对 Value 进行压缩存储。


热 Key (HotKey):

定义:访问频率极高的 Key(如突发热点新闻)。

危害:单节点网卡/CPU 打满,造成集群负载不均。

发现:监控工具(如 redis-monitor)、抓包分析。

解决:

多级缓存:本地缓存 (Guava/Caffeine) + Redis。

副本读写分离:为热 Key 建立多个从副本,分散读流量。

Key 冗余:将热 Key 复制多份(如 hot_key_1, hot_key_2),客户端随机访问。