You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
from binascii import crc_hqx
from redis.typing import EncodedT
# Redis Cluster's key space is divided into 16384 slots. # For more information see: https://github.com/redis/redis/issues/2576 REDIS_CLUSTER_HASH_SLOTS = 16384
__all__ = ["key_slot", "REDIS_CLUSTER_HASH_SLOTS"]
def key_slot(key: EncodedT, bucket: int = REDIS_CLUSTER_HASH_SLOTS) -> int: """Calculate key slot for a given key.
See Keys distribution model in https://redis.io/topics/cluster-spec :param key - bytes :param bucket - int """
start = key.find(b"{") if start > -1: end = key.find(b"}", start + 1) if end > -1 and end != start + 1: key = key[start + 1 : end] return crc_hqx(key, 0) % bucket
|