Generated banner for Redis Clustering
Generated logo for Redis Clustering

Redis Clustering

RedisOfficialCreated by Redis, Inc.

  • Skill
  • Tool integration
  • Software development
  • MIT
  • No issues found

From the author

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.
— the description by Redis, Inc.

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This guide provides essential patterns for operating Redis in a clustered or replicated environment. It addresses the common challenges of data sharding, specifically how to use hash tags to ensure related keys reside on the same slot to prevent CROSSSLOT errors during multi-key operations. Additionally, it outlines strategies for scaling read-heavy applications by offloading traffic to replicas, while highlighting the necessary trade-offs regarding data consistency.

What it does

  • Explains the use of hash tags to group related keys within the same Redis Cluster slot.
  • Provides guidance on avoiding CROSSSLOT errors during multi-key operations like MGET or pipelines.
  • Demonstrates how to configure clients to route read traffic to replicas.
  • Outlines the consistency trade-offs when reading from replicas.
  • Offers rules of thumb for effective key design to prevent hotspots.

When to use it

  • When designing key naming conventions for a sharded Redis Cluster.
  • When debugging CROSSSLOT errors in multi-key commands or transactions.
  • When optimizing performance for read-heavy workloads.
  • When implementing caching, analytics, or dashboard features that can tolerate eventual consistency.

Advantages

  • Prevents common runtime errors in clustered environments.
  • Improves system scalability by distributing read load.
  • Ensures predictable performance for multi-key operations.
  • Provides clear, actionable patterns for both cluster and standalone replication.

Usage examples

“How do I fix a CROSSSLOT error when using MGET in Redis Cluster?”
The agent explains that MGET requires all keys to be in the same slot and demonstrates how to use hash tags like {user:1001} to force keys into the same slot.
“How can I scale my Redis read traffic?”
The agent provides code examples for enabling read-from-replicas in Redis Cluster or connecting separate clients to primary and replica nodes.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/redis/redis-clustering/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip redis-clustering.zip -d .agents/skills

Documentation by Redis, Inc.

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

Files

references/hash-tags.md

Use Hash Tags for Multi-Key Operations

In Redis Cluster, keys are distributed across slots based on their hash. Use hash tags to ensure keys that must be used together in multi-key operations are on the same slot.

Correct: Use hash tags for keys used in multi-key operations.

Python (redis-py):

# These keys go to the same slot because {user:1001} is the hash tag
redis.set("{user:1001}:profile", "...")
redis.set("{user:1001}:settings", "...")
redis.set("{user:1001}:cart", "...")

# Now you can use transactions and pipelines
pipe = redis.pipeline()
pipe.get("{user:1001}:profile")
pipe.get("{user:1001}:settings")
pipe.execute()

# Multi-key commands also work
redis.lmove("{user:1001}:pending", "{user:1001}:processed", "LEFT", "RIGHT")

Java (Jedis):

import redis.clients.jedis.UnifiedJedis;
import java.util.Set;

try (UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379")) {
    // Hash tags ensure keys go to the same slot
    jedis.sadd("{bikes:racing}:france", "bike:1", "bike:2", "bike:3");
    jedis.sadd("{bikes:racing}:usa", "bike:1", "bike:4");

    // Multi-key operation works because of matching hash tags
    Set<String> result = jedis.sdiff("{bikes:racing}:france", "{bikes:racing}:usa");
}

Incorrect: Keys without hash tags that need multi-key operations.

Python (redis-py):

# Bad: These may be on different slots
redis.set("user:1001:profile", "...")  # No hash tag
redis.set("user:1001:settings", "...")

# This will fail in cluster mode
pipe = redis.pipeline()
pipe.get("user:1001:profile")
pipe.get("user:1001:settings")
pipe.execute()  # CROSSSLOT error

Java (Jedis):

// Bad: No hash tags - keys may be on different slots
jedis.sadd("bikes:racing:france", "bike:1", "bike:2", "bike:3");
jedis.sadd("bikes:racing:usa", "bike:1", "bike:4");

// This will fail in cluster mode with CROSSSLOT error
Set<String> result = jedis.sdiff("bikes:racing:france", "bikes:racing:usa");

Hash tag rules:

  • Only the part between { and } is hashed for slot assignment

  • Use meaningful identifiers like {user:1001} not just {1001} to avoid unrelated keys (e.g., purchase:{1001}, employee:{1001}) saturating the same slot

  • Use hash tags only where multi-key operations are needed, not as a general habit

Reference: Redis Cluster Key Distribution

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs Python

Security

No issues found by our static scan· No issues found

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
Redis, Inc.
Publisher
Redis (Official)
Source
redis/agent-skills · skills/redis-clustering · commit 74708da
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced
Also distributed in
redis/agent-skills

AutoGineer is not affiliated with or endorsed by Redis, Inc. or Redis.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download redis-clustering.zip