// 获取指定key对应的主设备节点 private RedisClient GetRedisClient(string[] keys) { //for multiple keys, only execute if they all share the same connection slot. if (keys == null || keys.Length == 0) { throw new ArgumentNullException("keys"); } int slot = CRC16.GetSlot(keys[0]); if (keys.Length > 1) { for (int i = 1; i < keys.Length; i++) { int nextSlot = CRC16.GetSlot(keys[i]); if (slot != nextSlot) { throw new Exception("No way to dispatch this command to Redis Cluster because keys have different slots."); } } } if (!_redisClientManagers.ContainsKey(slot)) { throw new SlotNotFoundException(string.Format("No reachable node in cluster for slot {{{0}}}", slot), slot, keys[0]); } var pool = _redisClientManagers[slot]; return((RedisClient)pool.GetClient()); }
// 获取指定key对应的主设备节点 private RedisClient GetRedisClient(string key) { if (string.IsNullOrEmpty(key)) { throw new ArgumentNullException("key"); } int slot = CRC16.GetSlot(key); if (!_redisClientManagers.ContainsKey(slot)) { throw new SlotNotFoundException(string.Format("No reachable node in cluster for slot {{{0}}}", slot), slot, key); } var pool = _redisClientManagers[slot]; return((RedisClient)pool.GetClient()); }