redis-clustering — скилл для Claude Code: хеш-теги и реплики
Подсказывает, как разложить ключи по слотам Redis Cluster и снять нагрузку чтения с праймари. Пригодится, когда ловишь CROSSSLOT на MGET или проектируешь ключи заранее.
npx skills add redis/agent-skills --skill redis-clustering -a claude-codeЧто делает redis-clustering
Скилл разбирает две проблемы, на которых спотыкаются почти все, кто впервые включает кластерный режим. Первая — ошибка CROSSSLOT: любая команда с несколькими ключами (MGET, SDIFF, транзакции, пайплайны, Lua-скрипты) требует, чтобы все ключи лежали в одном слоте. Хеш-тег решает это: в расчёт слота идёт только часть между { и }.
Тег советует брать по смыслу сущности — {user:1001}, а не голый {1001}, иначе разные пространства имён вроде purchase:{1001} и employee:{1001} свалятся в один слот. Помечать тегами стоит только те ключи, где правда нужны операции над несколькими ключами: если проставить их везде, появятся хотспоты и шардирование потеряет смысл. Переименовать ключи в продакшене больно, поэтому планировать теги лучше до запуска.
Вторая часть — чтение с реплик. В RedisCluster включается флагом read_from_replicas=True, запись уходит на праймари, а get может обслужить реплика. Для обычной репликации без кластера скилл предлагает два клиента на разные хосты. Цена — согласованность: реплики в конечном счёте консистентны, поэтому читать с них собственные записи и всё, где нужна строгая свежесть (балансы, состояние идемпотентности), не стоит. Кэши, аналитика, дашборды и ленты рекомендаций — нормальные кандидаты.
Какие задачи решает
- разложить ключи по слотам так, чтобы операции над несколькими ключами не падали
- починить CROSSSLOT на
MGET,SDIFFили в пайплайне - собрать транзакцию или Lua-скрипт с несколькими ключами в кластере
- разгрузить праймари, отдав чтение репликам
- выбрать, где вообще уместны хеш-теги, а где они создадут хотспоты
Примеры запросов агенту
- У меня падает CROSSSLOT на MGET по ключам user:1001:profile и user:1001:settings — помоги переделать ключи
- Спроектируй ключи для Redis Cluster под корзину и заказы пользователя, чтобы транзакции работали
- Настрой чтение с реплик в RedisCluster для дашборда, запись оставь на праймари
Как установить redis-clustering
1Через Skills CLI (Vercel)
npx skills add redis/agent-skills --skill redis-clustering -a claude-code2Вручную: положить файлы
~/.claude/skills/redis-clustering/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/redis-clustering/
1Через Skills CLI (Vercel)
npx skills add redis/agent-skills --skill redis-clustering -a codex2Вручную: положить файлы
.agents/skills/redis-clustering/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add redis/agent-skills --skill redis-clustering -a cursor2Вручную: положить файлы
.cursor/skills/redis-clustering/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install redis/agent-skills redis-clustering2Вручную: положить файлы
.github/skills/redis-clustering/SKILL.md1Через Skills CLI (Vercel)
npx skills add redis/agent-skills --skill redis-clustering -a gemini-cli2Командой платформы
gemini skills install https://github.com/redis/agent-skills --path skills/redis-clusteringВручную: положить файлы
.devin/skills/redis-clustering/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add redis/agent-skills --skill redis-clustering -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о redis-clustering
Как установить redis-clustering в Claude?
Выполни npx skills add redis/agent-skills --skill redis-clustering -a claude-code. Скилл встанет в ~/.claude/skills/redis-clustering/SKILL.md.
Что делает redis-clustering?
Даёт агенту правила по хеш-тегам для операций с несколькими ключами и по чтению с реплик. Помогает и при отладке CROSSSLOT, и на этапе проектирования ключей.
Можно ли читать с реплик всё подряд?
Нет. Реплики в конечном счёте консистентны, поэтому чтение собственных записей и данные, где важна свежесть, с них брать не стоит. Кэши, аналитика и дашборды подходят.
Исходный текст
SKILL.md · MIT
---
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.
```python
# 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")
```
```python
# 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](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.
```python
# 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:
```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](references/read-replicas.md).
## References
- [Redis Cluster spec — hash tags](https://redis.io/docs/latest/operate/oss_and_stack/reference/cluster-spec/#hash-tags)
- [Redis: multi-key operations in cluster](https://redis.io/docs/latest/operate/rs/databases/durability-ha/clustering/#multikey-operations)
- [Redis: Replication](https://redis.io/docs/latest/operate/oss_and_stack/management/replication/)
© Redis, Inc. · MIT · redis/agent-skills