PluginBench
Skill
Official
Pass
Audit score 90

redis-clustering

redis/agent-skills

Design Redis Cluster keys with hash tags and route reads to replicas to avoid CROSSSLOT errors and scale read-heavy workloads.

What is redis-clustering?

Guidance for deploying Redis Cluster and replication setups. Covers hash-tag syntax to keep multi-key operations on the same slot, debugging CROSSSLOT errors on MGET/SDIFF/transactions, and routing reads to replicas for caches and analytics without overloading primaries.

  • Use hash tags (e.g., {user:1001}) to force related keys onto the same slot for multi-key operations
  • Avoid CROSSSLOT errors on pipelines, transactions, Lua scripts, and commands like MGET, SDIFF, SUNIONSTORE
  • Route read traffic to replicas in Cluster or primary/replica setups to scale read-heavy workloads
  • Design keys incrementally with tags only where multi-key ops are needed to prevent hotspots
  • Understand eventual consistency trade-offs when reading from replicas

How to install redis-clustering

npx skills add https://github.com/redis/agent-skills --skill redis-clustering
Claude Code
Cursor
Windsurf
Cline

How to use redis-clustering

  1. 1.Identify entities that require multi-key operations (e.g., user profiles with settings)
  2. 2.Add hash tags around the entity identifier in your key names, e.g., {user:1001}:profile and {user:1001}:settings
  3. 3.Test multi-key commands (MGET, pipelines, transactions) to confirm they work without CROSSSLOT errors
  4. 4.For read-heavy workloads, enable replica reads in your Redis client (e.g., read_from_replicas=True in redis-py)
  5. 5.Monitor replica lag and avoid replica reads for operations requiring strict freshness (financial data, idempotency checks)

Use cases

Good for
  • Designing key naming schemes for a new Redis Cluster deployment
  • Debugging CROSSSLOT errors in pipelines or multi-key commands
  • Implementing transactions or Lua scripts that touch multiple related keys
  • Scaling read capacity by routing analytics and dashboard queries to replicas
  • Configuring client libraries to read from replicas in cluster mode
Who it's for
  • Backend engineers designing Redis data models
  • DevOps engineers deploying Redis Cluster
  • Application developers debugging cluster-mode errors
  • Teams building read-heavy caching or analytics layers

redis-clustering FAQ

What is a CROSSSLOT error?

It occurs when a single command touches multiple keys that hash to different slots in a Redis Cluster. Hash tags force related keys to the same slot, preventing this error.

Should I hash-tag all my keys?

No. Only tag keys that are part of the same multi-key operation. Over-tagging creates hotspots and defeats sharding. Tag incrementally for entities you actually group.

Can I read from replicas in Redis Cluster?

Yes. Most Redis Cluster clients support a read_from_replicas flag. Replicas are eventually consistent, so use them for caches, analytics, and dashboards—not for strict-consistency operations.

What happens if a replica is behind the primary?

Reads from a lagging replica may return stale data. Monitor replica lag and avoid replica reads for operations requiring up-to-date state.

How do I migrate keys with hash tags in production?

Key renaming with hash tags is painful in production. Plan your tagging strategy up front for entities you know will need multi-key ops.

Full instructions (SKILL.md)

Source of truth, from redis/agent-skills.


name: redis-clustering description: 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. license: MIT metadata: author: Redis, Inc. version: "0.1.0"

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.

# Same slot — multi-key ops work
redis.set("{user:1001}:profile",  "...")
redis.set("{user:1001}:settings", "...")
redis.lmove("{user:1001}:pending", "{user:1001}:processed", "LEFT", "RIGHT")
# Different keys, no hash tag — CROSSSLOT on multi-key commands in cluster mode
redis.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.

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.

# Redis Cluster: enable replica reads on the client
from redis.cluster import RedisCluster

rc = RedisCluster(host="localhost", port=6379, read_from_replicas=True)
rc.set("key", "value")     # → primary
value = rc.get("key")       # → may be served by a replica

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

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.

References