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); } }
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; }
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); }