Tôi không quen thuộc với Elasticache, nhưng StackExchange.Redis ConnectionMultiplexer
sẽ tự động thử lại dưới nền nếu kết nối bị ngắt và nó sẽ phát hiện các nút đã phục hồi.
Tất nhiên, khi thất bại, bạn sẽ nhận được ngoại lệ khi truy cập cơ sở dữ liệu, nhưng nếu bạn xử lý lỗi chính xác, bạn sẽ không cần phải tạo lại ConnectionMultiplexer
.
tôi đã sử dụng đoạn mã sau để kiểm tra điều này trong cluster-mode và độc lập-mode:
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;
tôi đã nhận được ba loại ngoại lệ khi tắt máy tính/đâm các máy chủ khác nhau: RedisServerException
, RedisConnectionException
và TimeoutException
. Và ngừng nhận ngoại lệ khi máy chủ/cụm máy chủ hoạt động trở lại.
Bạn đang đề cập đến thư viện 'StackExchange.Redis'? – thepirat000
Có - [this] (https://github.com/StackExchange/StackExchange.Redis) – nirw