Я не знаком с 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
. И перестал получать исключения после того, как сервер/кластер снова заработает.
person
thepirat000
schedule
14.10.2015
StackExchange.Redis
? - person thepirat000   schedule 14.10.2015