sql >> Database teknologi >  >> NoSQL >> Redis

Brug af ServiceStack.Redis.Sentinel

Du bør kun levere værten for Redis Sentinel Server til RedisSentinel da den får den aktive liste over andre master/slave redis-servere fra Sentinel-værten.

Nogle ændringer til RedisSentinel blev for nylig tilføjet i den seneste v4.0.37 som nu er tilgængelig på MyGet, som inkluderer ekstra logning og tilbagekald af Redis Sentinel-begivenheder. Den nye v4.0.37 API ser sådan ud:

var sentinel = new RedisSentinel(sentinelHost, masterName);

Start af RedisSentinel vil oprette forbindelse til Sentinel Host og returnere en forudkonfigureret RedisClientManager (dvs. redis forbindelsespulje) med den aktive

var redisManager = sentinel.Start();

Som du så kan registrere i IOC med:

container.Register<IRedisClientsManager>(redisManager);

RedisSentinel skal så lytte til master/slave-ændringer fra Sentinel-værterne og failover redisManager derfor. De eksisterende forbindelser i poolen bortskaffes derefter og erstattes med en ny pool til de nykonfigurerede værter. Alle aktive forbindelser uden for puljen vil kaste forbindelsesundtagelser, hvis de bruges igen, næste gang RedisClienten hentes fra puljen vil den blive konfigureret med de nye værter.

Tilbagekald og logning

Her er et eksempel på, hvordan du kan bruge de nye tilbagekald til at introspektere RedisServer-begivenhederne:

var sentinel = new RedisSentinel(sentinelHost, masterName)
{
    OnFailover = manager => 
    {
        "Redis Managers were Failed Over to new hosts".Print();
    },
    OnWorkerError = ex =>
    {
        "Worker error: {0}".Print(ex);
    },
    OnSentinelMessageReceived = (channel, msg) =>
    {
        "Received '{0}' on channel '{1}' from Sentinel".Print(channel, msg);
    },                
};

Logning af disse hændelser kan også aktiveres ved at konfigurere Log på ServiceStack:

LogManager.LogFactory = new ConsoleLogFactory(debugEnabled:false);

Der er også en ekstra eksplicit FailoverToSentinelHosts() der kan bruges til at tvinge RedisSentinel for at genopsøge og failover til de seneste master/slave-værter, f.eks.:

var sentinelInfo = sentinel.FailoverToSentinelHosts();

De nye værter er tilgængelige i den returnerede sentinelInfo:

"Failed over to read/write: {0}, read-only: {1}".Print(
    sentinelInfo.RedisMasters, sentinelInfo.RedisSlaves);



  1. Hvordan udelukker man et bestemt felt fra en samling i Mongoose?

  2. Redis klynge/belastningsbalancering

  3. Redis publicer/abonner:se hvilke kanaler der i øjeblikket abonnerer på

  4. Forslag til simpel .NET distribueret caching-løsning