Hash slots

Тема дорожной карты · Redis

Redis Cluster распределяет ключи по 16 384 хэш-слотам, где слот каждого ключа вычисляется как CRC16(key) mod 16384. Каждый первичный узел в Redis Cluster владеет непрерывным или непоследовательным диапазоном хэш-слотов, и каждый ключ принадлежит ровно одному слоту. Хэш-теги позволяют нескольким ключам разделять один слот, заключая подстроку в фигурные скобки (например, {user:1000}.name и {user:1000}.email хэшируются в один и тот же слот), что позволяет выполнять многоключевые операции над связанными данными. Команда CLUSTER KEYSLOT key возвращает хэш-слот для любого ключа, а CLUSTER SLOTS сопоставляет диапазоны слотов с их первичными и реплицируемыми узлами. Понимание хэш-слотов необходимо при проектировании схем Redis Cluster, позволяющих избежать межслотовых операций и максимизировать эффективность пайплайнинга.

Как это работает

Hash slots шардирует данные между нодами через 16384 слота. Каждый ключ хешируется в слот; каждая master-нода владеет диапазоном слотов. Реплики бекапят masters (sentinel-less HA встроен). Клиенты cluster-aware: кешируют map слот→нода, следуют MOVED/ASK редиректам. Multi-key команды работают только на ключах в одном слоте (используйте {tag} в ключах для force same-slot: user:{42}:profile и user:{42}:posts).

Когда применять

Cluster — когда (а) данные превышают RAM одного хоста, (б) write throughput выше, чем одна master может, (в) нужен авто-failover без Sentinel. Для большинства приложений с < 100GB working set — один primary + реплика (с Sentinel или без) проще и достаточно. Тестируйте cluster failover до зависимости от него; cluster-операции сложнее single-node.

Типичные ошибки

Ловушки Hash slots: multi-key команды (MGET, SINTER) падают, потому что ключи в разных слотах (используйте {hashtag} для co-locate); старые клиенты не понимают cluster mode (тихие замедления от MOVED retry loop); ребалансировка в production без наблюдения за памятью + миграцией слотов (один move слота кратко стопит записи).

Связанные понятия

Полезные ресурсы