sql >> データベース >  >> NoSQL >> Redis

ServiceStack.Redis.Sentinelの使用法

    RedisSentinelサーバーのホストをRedisSentinelにのみ提供する必要があります Sentinelホストから他のマスター/スレーブRedisサーバーのアクティブリストを取得するため。

    RedisSentinelへのいくつかの変更 最近、最新の v4.0.37に追加されました これは、RedisSentinelイベントの追加のロギングとコールバックを含むMyGetで利用できるようになりました。新しいv4.0.37 APIは次のようになります:

    var sentinel = new RedisSentinel(sentinelHost, masterName);
    

    RedisSentinelを起動すると、Sentinelホストに接続し、アクティブな

    を使用して事前構成されたRedisClientManager(つまり、redis接続プール)を返します。
    var redisManager = sentinel.Start();
    

    その後、IOCに登録できます:

    container.Register<IRedisClientsManager>(redisManager);
    

    RedisSentinel 次に、Sentinelホストからのマスター/スレーブの変更をリッスンし、 redisManagerをフェイルオーバーする必要があります。 によると。次に、プール内の既存の接続が破棄され、新しく構成されたホスト用の新しいプールに置き換えられます。プール外のアクティブな接続は、再度使用されると接続例外をスローします。次にRedisClientがプールから取得されると、新しいホストで構成されます。

    コールバックとロギング

    新しいコールバックを使用してRedisServerイベントをイントロスペクトする方法の例を次に示します。

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

    これらのイベントのロギングは、ServiceStackでのロギングを構成することによっても有効にできます:

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

    追加の明示的なFailoverToSentinelHosts()もあります RedisSentinelを強制するために使用できます 最新のマスター/スレーブホストを再検索してフェイルオーバーするには、例:

    var sentinelInfo = sentinel.FailoverToSentinelHosts();
    

    新しいホストは、返されたsentinelInfoで利用できます:

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



    1. 配列をフィルタリングして関連コンテンツを入力するマングースクエリ

    2. Java、MongoDB:膨大なコレクションを繰り返しながらすべてのオブジェクトを更新するにはどうすればよいですか?

    3. Java用の最高のRedisライブラリ

    4. mongodbアグリゲーションのサブストリングと一致