针对 Redis 中大 Key(数据量大且访问频繁)的问题,需从 数据拆分、访问优化、架构设计 等多维度综合解决。以下是具体方案及实施步骤:
一、大 Key 的定义与危害
- 定义:
- Value 过大:如 String 类型 Value > 10KB,集合类型(Hash/List/Set/ZSet)元素数量 > 1 万。
- 访问频率高:单 Key 承担超过 50% 的请求,形成热点。
- 危害:
- 内存不均:单 Key 占用内存过高,可能导致节点内存溢出。
- 操作阻塞:大 Key 的读写(如
HGETALL
、LRANGE
)耗时长,阻塞其他请求。 - 集群倾斜:在 Redis Cluster 中,大 Key 无法分片,导致数据分布不均。
- 网络瓶颈:频繁读取大 Key 占用带宽,影响整体吞吐量。
二、解决方案
1. 数据拆分:化整为零
- 场景:适用于可分割的数据(如 Hash、List、ZSet)。
- 方法:
- 垂直拆分:按字段/属性拆分到多个 Key。
# 原始大 Key(Hash) HSET user:1 name "John" age 30 address "..." ...
- 垂直拆分:按字段/属性拆分到多个 Key。