我计划使用ConnectionMultiplexer.Connect("server1:6379,server2:6379")
语法,其中包括ElastiCache复制组中每个节点的地址和端口号组合(在AWS术语中)。
这个库会自动处理死节点/无响应节点,并将命令自动传递给活动节点吗?
这个库会自动发现故障节点已经可用/新节点已添加到复制组吗?
我计划使用ConnectionMultiplexer.Connect("server1:6379,server2:6379")
语法,其中包括ElastiCache复制组中每个节点的地址和端口号组合(在AWS术语中)。
这个库会自动处理死节点/无响应节点,并将命令自动传递给活动节点吗?
这个库会自动发现故障节点已经可用/新节点已添加到复制组吗?
我不熟悉Elasticache,但是StackExchange.Redis的ConnectionMultiplexer
会在后台自动重试,如果连接断开,它还会发现已恢复的节点。
当然,在访问数据库时出现故障时,您会收到异常,但是如果正确处理错误,您将无需重新创建ConnectionMultiplexer
。
我使用以下代码测试了集群模式和独立模式:
var mul = ConnectionMultiplexer.Connect("192.168.15.15:7000,192.168.15.15:7001,...,connectRetry=10,syncTimeout=5000,abortConnect=false,keepAlive=10,allowAdmin=true");
RETRY:
Thread.Sleep(1000);
var k = Guid.NewGuid().ToString();
var v = Guid.NewGuid().ToString();
try
{
var db = mul.GetDatabase();
db.StringSet(k, v);
if (db.StringGet(k).ToString() != v)
{
throw new OperationCanceledException("ABORT");
}
}
catch(RedisServerException ex)
{
Console.WriteLine("Redis Server Exception {0}", ex.Message);
goto RETRY;
}
catch(RedisConnectionException ex)
{
Console.WriteLine("Redis Connection Exception {0}", ex.Message);
goto RETRY;
}
catch(TimeoutException ex)
{
Console.WriteLine("Timeout Exception {0}", ex.Message);
goto RETRY;
}
Console.WriteLine("OK");
goto RETRY;
当关闭/崩溃不同的服务器时,我收到了三种异常类型:RedisServerException
、RedisConnectionException
和TimeoutException
。一旦服务器/集群重新运行起来,就不再收到异常。
StackExchange.Redis
库吗? - thepirat000