Redis 分区
数据分片把容量与负载分散到多实例。
Key Points分区解决单实例内存上限与热点;客户端分片、Twemproxy、Redis Cluster 三种思路。
三种方案
| 方案 | 特点 |
|---|---|
| 客户端分片 | 应用按 key 哈希选节点 |
| Twemproxy / Codis | 代理层统一分片,对客户端透明 |
| Redis Cluster | 官方集群,16384 槽自动分配 |
哈希取模示例
Python
nodes = ['redis-0', 'redis-1', 'redis-2']
def node_for(key): return nodes[hash(key) % len(nodes)]After partitioning, single-key ops are fine, but cross-node transactions/multi-key ops (e.g. SUNION across nodes) fail. Cluster uses hash slots; keep related keys on one slot via hash tags.
三种方案
| 方案 | 特点 |
|---|---|
| 客户端分片 | 应用按 key 哈希选节点 |
| Twemproxy / Codis | 代理层统一分片,对客户端透明 |
| Redis Cluster | 官方集群,16384 槽自动分配 |
哈希取模示例
Python
nodes = ['redis-0', 'redis-1', 'redis-2']
def node_for(key): return nodes[hash(key) % len(nodes)]分区后单 key 操作没问题,但跨节点的事务、多 key 操作(如 SUNION 两个不同节点的 Set)会失效——Cluster 用「槽」约束:同一槽的 key 才能做多 key 操作(用 hash tag 把相关 key 绑到同一槽)。