StackExchange.Redis公式ドキュメント(二)Configuration

6558 ワード

コンフィギュレーション
redis、StackExchangeを構成する方法はいくつかあります.Redisは、Connect(or ConnectAsync)を実行するときに呼び出される豊富な構成モデルを提供します.
var conn = ConnectionMultiplexer.Connect(configuration);

ここでのconfigurationは、次のタイプのいずれかです.
  • ConfigurationOptions
  • 構成データを含む文字列
  • 後者は基本的に前者の文字列形式である
    基本的な構成文字列
    最も簡単な例は、ホスト名のみを含むことです.
    var conn = ConnectionMultiplexer.Connect("localhost");

    これにより、ローカルマシンにデフォルトポート(6379)を使用して配備された単一サーバにリンクされます.残りの構成オプションは、後に続く(カンマで区切る)だけです.ポートは通常、セミコロン(:)で区切られています.コンフィギュレーションオプションは、名前の後ろに=があります.例:
    var conn = ConnectionMultiplexer.Connect("redis0:6380,redis1:6380,allowAdmin=true");
    stringConfigurationOptionsのマッピングについては、以下に詳細な概要を示します.これらのマッピングは、次のように相互に変換できます.
    ConfigurationOptions options = ConfigurationOptions.Parse(configString);

    or:
    string configString = options.ToString();

    基本的な構成は文字列に保存されますが、実行時に特殊な構成が適用されます.
    string configString = GetRedisConfiguration();
    var options = ConfigurationOptions.Parse(configString);
    options.ClientName = GetAppName(); //              
    options.AllowAdmin = true;
    conn = ConnectionMultiplexer.Connect(options);

    パスワード付きMicrosoftAzure Redisの例:
    var conn = ConnectionMultiplexer.Connect("contoso5.redis.cache.windows.net,ssl=true,password=...");

    構成オプションConfigurationOptionsオブジェクトには多くの属性があり、変換時に自動的に判断されます.次に、一般的な構成を示します.
    Configuration string ConfigurationOptions
    Meaning
    abortConnect={bool} AbortOnConnectFail
    trueの場合、Connectメソッドは有効なサーバにリンクされていないときにリンクインスタンスを作成しません.
    allowAdmin={bool} AllowAdmin
    リスクと認定されたコマンドの有効化
    channelPrefix={string} ChannelPrefix
    すべてのパブリケーションサブスクリプションチャンネルのプレフィックス
    connectRetry={int} ConnectRetry
    初期化Connectに失敗したときにリンクを再試行した回数
    connectTimeout={int} ConnectTimeout
    リンクタイムアウト時間(ms)
    configChannel={string} ConfigurationChannel
    構成変更情報を伝達するためのブロードキャストチャネル
    defaultDatabase={int} DefaultDatabase
    デフォルトのデータベース・シーケンス数、1~1
    keepAlive={int} KeepAlive
    SOcketsのオンライン間隔を維持するために情報を送信
    name={string} ClientName
    redis内で異なるリンククライアントを判別するために使用
    password={string} Password
    パスワード
    proxy={proxy type} Proxy
    エージェントタイプ(あれば);例えば「twemproxy」
    resolveDns={bool} ResolveDns
    DNS解析サーバを指定し、デフォルトではなく明確な指摘を推奨します.
    serviceName={string} ServiceName
    現在実装されていません(sentinelモード用)
    ssl={bool} Ssl
    SSL暗号化の使用
    sslHost={string} SslHost
    サーバ証明書にSSLホストIDを登録する
    syncTimeout={int} SyncTimeout
    同期操作のタイムアウト時間(ms)
    tiebreaker={string} TieBreaker
    マルチホストサーバの導入状況でmasterサービスを選択するためのKey
    version={string} DefaultVersion
    Redisバージョン(サーバからこの情報を取得できない場合)
    writeBuffer={int} WriteBuffer
    出力キャッシュサイズ
    構成文字列のTokenはカンマで区切られています.=シンボルを持たないTokenは、サーバノードとみなされます.ノード情報は、sslが使用されていない場合、ポート番号がデフォルトで6379になり、sslが有効である場合、デフォルトで6380になります.Tokenでは、$で始まると、コマンドマッピング情報、例えば、$config=cfgであることを示す.
    自動構成と手動構成
    通常のシナリオではStackExchange.Redisでは、サーバタイプとバージョン、リンクタイムアウト時間、プライマリ・スレーブ関係など、多くの設定が自動的に構成されます.ただし、これらのコマンドはredisサーバによって無効化される場合があります.この場合、これらの情報を提供する必要があります.
    ConfigurationOptions config = new ConfigurationOptions
    {
        EndPoints =
        {
            { "redis0", 6379 },
            { "redis1", 6380 }
        },
        CommandMap = CommandMap.Create(new HashSet
        { // EXCLUDE a few commands
            "INFO", "CONFIG", "CLUSTER",
            "PING", "ECHO", "CLIENT"
        }, available: false),
        KeepAlive = 180,
        DefaultVersion = new Version(2, 8, 8),
        Password = "changeme"
    };

    または、次の文字列を使用します.
    redis0:6379,redis1:6380,keepAlive=180,version=2.8.8,$CLIENT=,$CLUSTER=,$CONFIG=,$ECHO=,$INFO=,$PING=

    コマンド名
    redisには、個別のコマンドを無効にしたり名前を変更したりする非常用機能があります.これまでの各例では、この機能はCommandMapによって動作していたが、伝達パラメータHashSetまたはCreate()の形式(どのコマンドが使用可能であるかを明確に示す)ではなく、Dictionaryの形式を採用していた.この辞書に含まれるすべてのコマンドは有効と仮定され、名前は変更されていません.nullまたは空の文字列は、コマンドが無効になっていることを示します.たとえば、次のようにします.
    var commands = new Dictionary {
            { "info", null }, // disabled
            { "select", "use" }, // renamed to SQL equivalent for some reason
    };
    var options = new ConfigurationOptions {
        // ...
        CommandMap = CommandMap.Create(commands),
        // ...
    }

    文字列形式:
    $INFO=,$SELECT=use

    Twemproxy
    Twemproxyは、複数のサーバを1つのサーバと見なすことができるツールであり、共有とフォールトトレランス能力を備えています(これはredis clusterと似ていますが、実装方法は異なります).Twemproxyで使える機能は簡略化されています.手動構成を回避するには、Proxyの構成項目を使用します.
    var options = new ConfigurationOptions
    {
        EndPoints = { "my-server" },
        Proxy = Proxy.Twemproxy
    };

    Tiebreakersと構成変更公告
    通常の状況ではRedisは主従ノードを自動的に判別する.しかし、redis-sentinelやredis clusterのような管理ツールを使用していない場合は、複数のmasterノードがある場合に遭遇する可能性があります(たとえば、メンテナンス時にノードをリセットし、ネットワークではmasterとして表現されます).それを解決するためにRedisはtie-breakerの概念を使用しています.彼は複数のmasterを検出したときだけ使用します.(redis clusterを含まない場合、redis clusterは複数のmasterが必要であるため).BookSleeveと互換性を持つために、デフォルトのkeyは"__Booksleeve_TieBreak"(0番データベースのみ)です.彼は原始的な投票メカニズムでより適用可能なmasterを判断している.(so that work is routed correctly.)
    同様に、構成が変更された場合(特にmaster/slave構成)、リンクされたインスタンスに新しい環境(INFOCONFIGなどで使用可能なコマンド)を知らせることが重要である.StackExchagnge.Redistは、これらの通知を送信するために使用されるpub/subチャネルを自動的に購読する.BookSleeveと互換性を持つため、チャネル名のデフォルトは"__Booksleeve_MasterChanged"です.
    この2つのオプションは、.ConfigurationChannelおよび.TieBreakerの構成プロパティによってカスタマイズまたは無効化できます(""に設定されています).
    これらの設定は、IServer.MakeMaster()メソッドによって使用され、データベース内のtie-breakerおよびブロードキャスト構成変更メッセージを設定することもできる.master/slaveが変化する構成情報についても、ConnectionMultiplexer.PublishReconfigureメソッドにより、すべてのノードに構成のリフレッシュを要求することができる.
    原文住所:StackExchange.Redisの大部分は意訳ですが、不適切な場合は訂正してください.
    転載先:https://www.cnblogs.com/ArvinZhao/p/6007043.html