Redis Cluster распределяет ключи не напрямую по нодам, а сначала по 16 384 hash slots.
Формула по сути такая:
CRC16(key) % 16384Но есть важный трюк — hash tags.
Если ключ содержит часть в фигурных скобках, Redis хеширует только содержимое внутри
{}:{user100}:cart {user100}:ordersОба ключа будут вычислены по
user100, поэтому попадут в один и тот же hash slot и, соответственно, на одну ноду.Это нужно для multi-key операций в cluster mode.
Именно поэтому такие конструкции позволяют нормально использовать:
-
MGET-
MSET- транзакции
- Lua-скрипты с несколькими ключами
На уровне кода Redis сначала ищет
{, затем }, и если внутри есть непустая строка — хеширует только её.Небольшая деталь синтаксиса, которая на самом деле решает важную проблему распределённых операций в Redis Cluster.
