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