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

接続の管理

    Redis接続文字列#

    Redis接続文字列は、より用途の広いURI形式をサポートするように拡張され、Redisクライアント設定のほとんどを単一の接続文字列(DB接続文字列に類似)でキャプチャできるようになりました。

    Redis接続文字列は、単純なホスト名からの複数のURIのような形式をサポートします またはIPアドレスとポート 完全に修飾されたURIとペアリングします QueryStringで複数のオプションが指定されています。

    サポートされている形式の例:

    localhost
    127.0.0.1:6379
    redis://localhost:6379
    password@localhost:6379
    clientid:password@localhost:6379
    redis://clientid:password@localhost:6380?ssl=true&db=1
    

    情報

    その他の例はConfigTests.csで見ることができます

    追加の構成は、QueryStringパラメーターとして指定できます。指定できるオプションの完全なリストは次のとおりです。

    Ssl ブール これがSSL接続の場合
    Db int この接続をRedisDBに設定する必要があります
    クライアント 文字列 分析目的でこの接続に指定するテキストエイリアス
    パスワード 文字列 この接続のパスワードのUrlEncodedバージョン
    ConnectTimeout int TCPソケット接続を確立するためのミリ秒単位のタイムアウト
    SendTimeout int 同期TCPソケット送信を行うためのミリ秒単位のタイムアウト
    ReceiveTimeout int 同期TCPソケット受信を待機するためのミリ秒単位のタイムアウト
    IdleTimeOutSecs int アイドル接続がアクティブと見なされるまでの秒単位のタイムアウト
    NamespacePrefix 文字列 ServiceStack.Redis内部インデックスコレクションにカスタムプレフィックスを使用する

    ServiceStack.Redis SSLサポート#

    ServiceStack.RedisはSSL接続をサポートしています 安全なSSL接続を介してリモートRedisサーバーインスタンスにアクセスするのに適しています 。

    SSLプロトコル番号を指定してください#

    暗号化されたSSL接続に使用されるSslプロトコルの変更のサポートは、sslprotocolsを使用して接続文字列に設定できます。 修飾子、例:

    var connString = $"redis://{Host}?ssl=true&sslprotocols=Tls12&password={Password.UrlEncode()}";
    var redisManager = new RedisManagerPool(connString);
    using var client = redisManager.GetClient();
    //...
    

    Azure Redisへの接続#

    SSLを介したAzureRedisCacheへの接続がこの機能の主な使用例であったため、開始に役立つ新しいSSLを介したAzureRedisへの接続を追加しました。

    Redis GEO#

    Redis 3.2.0のリリースでは、エキサイティングな新しいGEO機能が提供され、緯度/経度座標をRedisに保存し、指定された半径内の場所を照会できるようになります。この機能を実証するために、新しいRedis GEOライブデモを作成しました。これを使用すると、米国内の任意の場所をクリックして、特定の半径内の最寄りの都市のリストを見つけることができます。ライブデモ:https://redis.netcore.io

    Redisクライアントマネージャー#

    RedisClientにアクセスするための推奨される方法 インスタンスは、以下の利用可能なスレッドセーフクライアントマネージャーの1つを使用することです。クライアントマネージャーは接続ファクトリであり、IOCまたは静的クラスのいずれかにシングルトンとして登録する必要があります。

    RedisManagerPool#

    強化されたRedisURI接続文字列により、既存のPooledRedisClientManagerを簡素化および合理化することができました。 実装し、それをRedisManagerPoolと呼ばれる新しいクライアントマネージャーに抽出しました 。

    Client Manager自体の上記のすべてのオプションを削除することに加えて、読み取り専用の接続文字列も削除されたため、構成ははるかに単純になり、一般的なユースケースとより一致するようになります。

    container.Register<IRedisClientsManager>(c => 
        new RedisManagerPool(redisConnectionString));
    

    プーリング動作

    プールの最大サイズに達した後に必要な接続はすべて作成され、プールの外部に配置されます。最大プールサイズに制限されないことにより、RedisManagerPoolでのプーリング動作 開いた/閉じた接続数が増える可能性を犠牲にして、接続プールのサイズを小さく維持できます。

    PooledRedisClientManager#

    クライアントマネージャー自体でオプションを定義する場合、または個別の読み取り/書き込みと読み取り専用(つまり、マスターとレプリカ)のredisサーバーを提供する場合は、PooledRedisClientManagerを使用します。 代わりに:

    container.Register<IRedisClientsManager>(c => 
        new PooledRedisClientManager(redisReadWriteHosts, redisReadOnlyHosts) { 
            ConnectTimeout = 100,
            //...
        });
    

    プーリング動作

    PooledRedisClientManager 最大接続制限を課し、その最大プールサイズに達すると、代わりに次のRedisClientまで新しい接続要求をブロックします プールに戻されます。 PoolTimeout内にクライアントが利用できなくなった場合 、プールTimeoutException スローされます。

    読み取り専用クライアント#

    デフォルトでは、GetRedisClient()を使用してRedisClientを解決します またはGetRedisClientAsync() 構成されたプライマリ(マスター)ホストに接続されたクライアントを返します。レプリカ(スレーブ)ホストも構成されている場合は、GetReadOnlyClient()を使用してアクセスできます。 またはGetReadOnlyClientAsync() API、例:

    using var redisReadOnly = clientsManager.GetReadOnlyClient();
    

    BasicRedisClientManager#

    接続プールを使用したくない場合(つまり、ローカルのredis-serverインスタンスにアクセスしている場合)、新しいRedisClientを作成する基本的な(プールされていない)ClientsManagerを使用できます。 毎回のインスタンス:

    container.Register<IRedisClientsManager>(c => 
        new BasicRedisClientManager(redisConnectionString));
    

    Redisクライアントへのアクセス#

    登録すると、RedisClientへのアクセスはすべてのクライアントマネージャーで同じになります。例:

    var clientsManager = container.Resolve<IRedisClientsManager>();
    using var redis = clientsManager.GetClient();
    
    redis.IncrementValue("counter");
    List<string> days = redis.GetAllItemsFromList("days");
    
    //Access Typed API
    var redisTodos = redis.As<Todo>();
    
    redisTodos.Store(new Todo {
        Id = redisTodos.GetNextSequence(),
        Content = "Learn Redis",
    });
    
    var todo = redisTodos.GetById(1);
    
    //Access Native Client
    var redisNative = (IRedisNativeClient)redis;
    
    redisNative.Incr("counter");
    List<string> days = redisNative.LRange("days", 0, -1);
    

    この例で使用されている利用可能なRedisClientAPIの詳細なリストは、以下のC#インターフェイスで確認できます。

    • IRedisClientsManager
    • IRedisClient
    • IRedisNativeClient
    • IRedisSubscription

    パイプラインとトランザクションAPI#

    • IRedisTransaction
    • IRedisPipelineShared
    • IRedisQueueableOperation
    • IRedisQueueCompletableOperation

    汎用クライアントAPI#

    • IRedisTypedClient
    • IRedisHash
    • IRedisList
    • IRedisSet
    • IRedisSortedSet
    • IRedisTypedQueueableOperation

    サーバーコレクションAPI#

    • IRedisHash
    • IRedisList
    • IRedisSet
    • IRedisSortedSet

    非同期Redis#

    ServiceStack.Redisの非同期サポートは、最適な効率を実現するように設計されており、ValueTaskを使用します &その他の最新の非同期APIは、 .NET Standard 2.0でのみ利用可能です および.NETFramework v4.7.2+ 以下のAsyncRedisインターフェースに含まれているほとんどの同期APIに相当する非同期APIがあるプロジェクト:

    • IRedisClientsManagerAsync
    • IRedisClientAsync
    • IRedisNativeClientAsync
    • IRedisSubscriptionAsync

    非同期パイプラインとトランザクションAPI#

    • IRedisTransactionAsync
    • IRedisPipelineSharedAsync
    • IRedisQueueableOperationAsync
    • IRedisQueueCompletableOperationAsync

    非同期汎用クライアントAPI#

    • IRedisTypedClientAsync
    • IRedisHashAsync
    • IRedisListAsync
    • IRedisSetAsync
    • IRedisSortedSetAsync
    • IRedisTypedTransactionAsync
    • IRedisTypedQueueableOperationAsync

    非同期サーバーコレクションAPI#

    • IRedisHashAsync
    • IRedisListAsync
    • IRedisSetAsync
    • IRedisSortedSetAsync

    1. SpringDataRESTアプリケーションがRedisキャッシングを実装した後にデータベースからデータを取得しない

    2. .rdbファイルがありますが、Redisは起動後に空になります

    3. マングースの個体数とオブジェクトのネスト

    4. データベースセキュリティ101:データベースアクセス権限について