Redis Clustering

作者 redisa84871d065f3MIT收录于 2026年10月8日更新于 2026年10月8日

Redis Cluster and replication guidance covering hash tags for multi-key operations, avoiding CROSSSLOT errors, and reading from replicas to scale read-heavy workloads. Use when designing keys for a sharded Redis Cluster, debugging CROSSSLOT errors on MGET / SDIFF / pipelines, configuring a multi-key transaction in a cluster, or routing reads to replicas for caches, analytics, or dashboards.

AI 生成的概览

关于 Redis Cluster 哈希标签多键操作与副本读取路由的指导。

功能
该技能提供关于在分片 Redis Cluster 以及独立主从复制中设计键和路由读取的书面指导。它说明哈希标签如何让 MGET、SDIFF、事务和管道等多键命令落在同一槽位以避免 CROSSSLOT 错误,以及如何将读流量发送到副本。它还介绍副本读取的一致性权衡,并指向两份参考文档。
适用场景
在为 Redis Cluster 部署设计键、调试多键命令的 CROSSSLOT 错误、实现涉及多个键的事务或 Lua 脚本,或在不增加分片的情况下扩展读密集型负载时使用。
运行要求
不附带脚本,仅为说明文档加两份参考文档。应用示例需要 Redis Cluster 或主从复制部署,以及 redis-py 之类的 Redis 客户端库。

Redis Clustering

Guidance for designing keys and routing reads in a sharded Redis Cluster (and in standalone primary/replica replication). Covers the two failure modes that bite most new cluster users: CROSSSLOT errors on multi-key operations, and overloading primaries with read traffic.

When to apply

  • Designing keys for a Redis Cluster deployment.
  • Debugging a CROSSSLOT error on MGET, SDIFF, transactions, or pipelines.
  • Implementing transactions / Lua scripts that touch multiple keys.
  • Scaling out read traffic without adding shards.

1. Hash tags for multi-key operations

Redis Cluster distributes keys across 16,384 slots by hashing the key name. Any command that touches multiple keys (MGET, SDIFF, SUNIONSTORE, transactions, pipelines, Lua scripts with multiple KEYS[]) requires all keys to live on the same slot — otherwise the server returns a CROSSSLOT error.

Hash tags force this: the part between { and } is the only thing hashed for slot assignment, so two keys sharing a hash tag always land together.

python
# Same slot — multi-key ops workredis.set("{user:1001}:profile",  "...")redis.set("{user:1001}:settings", "...")redis.lmove("{user:1001}:pending", "{user:1001}:processed", "LEFT", "RIGHT")
python
# Different keys, no hash tag — CROSSSLOT on multi-key commands in cluster moderedis.set("user:1001:profile",  "...")redis.set("user:1001:settings", "...")pipe = redis.pipeline()pipe.get("user:1001:profile")pipe.get("user:1001:settings")pipe.execute()  # CROSSSLOT error in cluster

Rules of thumb:

  • Use a tag scoped to the meaningful entity, e.g. {user:1001}. Avoid bare {1001} — unrelated namespaces (purchase:{1001}, employee:{1001}) would all collide on the same slot.
  • Only tag where you actually need multi-key ops. Tagging everything creates hotspots and defeats the point of sharding.
  • A single-key command on a hash-tagged key works fine, so adding tags later is incremental — but renaming keys in production is painful, so plan tagging up front for entities you'll group.

See references/hash-tags.md [blocked].

2. Read replicas for read-heavy workloads

If reads dominate writes, route them to replicas to free primary capacity. Works both in Redis Cluster (each shard has 1+ replica) and in standalone primary/replica replication.

python
# Redis Cluster: enable replica reads on the clientfrom redis.cluster import RedisCluster
rc = RedisCluster(host="localhost", port=6379, read_from_replicas=True)rc.set("key", "value")     # → primaryvalue = rc.get("key")       # → may be served by a replica

For non-cluster setups, point two clients at the right nodes:

python
primary = Redis(host="primary-host", port=6379)replica = Redis(host="replica-host", port=6379)primary.set("key", "value")value = replica.get("key")

The trade-off is consistency: replicas are eventually consistent. Don't read your own writes from a replica; don't use replica reads for anything that requires strict freshness (financial balances, idempotency state). Good fits: cache layers, analytics, dashboards, recommendation feeds.

See references/read-replicas.md [blocked].

References

来源与署名

来源:redis/agent-skills位于plugins/redis-development/skills/redis-clustering提交a84871d

许可证: MIT

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架