コード例 #1
0
        // 获取指定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());
        }
コード例 #2
0
        // 获取指定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());
        }