Esempio n. 1
0
 static void TestSentinel <T>(string reply, Func <RedisSentinelClient, T> syncFunc, Func <RedisSentinelClient, Task <T> > asyncFunc, Action <FakeRedisSocket, T> test)
 {
     using (var mock = new FakeRedisSocket(reply, reply))
         using (var sentinel = new RedisSentinelClient(mock, new DnsEndPoint("fakehost", 9999)))
         {
             var sync_result  = syncFunc(sentinel);
             var async_result = asyncFunc(sentinel);
             test(mock, sync_result);
             test(mock, async_result.Result);
         }
 }
Esempio n. 2
0
 static void TestSentinel <T>(string reply, Func <RedisSentinelClient, T> syncFunc, Func <RedisSentinelClient, Task <T> > asyncFunc, Action <MockConnector, T> test)
 {
     using (var mock = new MockConnector("MockHost", 9999, reply, reply))
         using (var sentinel = new RedisSentinelClient(mock))
         {
             var sync_result  = syncFunc(sentinel);
             var async_result = asyncFunc(sentinel);
             test(mock, sync_result);
             test(mock, async_result.Result);
         }
 }
        /// <summary>
        /// Connect to and return a Redis Sentinel client
        /// </summary>
        /// <param name="timeout">Time to wait for Sentinel response (milliseconds)</param>
        /// <returns>Connected Sentinel client, or null if cannot connect</returns>
        public RedisSentinelClient GetSentinel(int timeout)
        {
            int c = _sentinels.Count;
            while (c-- > 0)
            {
                var first = _sentinels.First;
                RedisSentinelClient sentinel = new RedisSentinelClient(first.Value.Key, first.Value.Value, timeout);
                if (sentinel.Connected)
                    return sentinel;

                _sentinels.RemoveFirst();
                _sentinels.AddLast(first.Value);
            }

            return null;
        }
Esempio n. 4
0
        private static ConnectionMultiplexer GetConnectString()
        {
            ConnectionMultiplexer connect = null;

            var dic = GetSettings();

            string master = GlobalConfig.SentinelMaster ?? "mymaster";

            foreach (var keyValue in dic)
            {
                using (var sentinel = new RedisSentinelClient(keyValue.Key, keyValue.Value))
                {
                    try
                    {
                        var masterInfo = sentinel.Master(master);

                        if (masterInfo != null)
                        {
                            connect = ConnectionMultiplexer.Connect(string.Format("{0}:{1},allowAdmin=true", masterInfo.Ip, masterInfo.Port));

                            connectString = string.Format("{0}:{1}", masterInfo.Ip, masterInfo.Port);

                            return(connect);
                        }
                    }
                    catch
                    {
                    }
                }

                if (connect == null)
                {
                    connect = ConnectionMultiplexer.Connect(GlobalConfig.RedisCacheAddress);

                    if (connect != null)
                    {
                        return(connect);
                    }
                }
            }
            return(connect);
        }