Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Verbindungen verwalten

Redis-Verbindungszeichenfolgen #

Redis-Verbindungszeichenfolgen wurden erweitert, um das vielseitigere URI-Format zu unterstützen, das jetzt in der Lage ist, die meisten Redis-Client-Einstellungen in einer einzigen Verbindungszeichenfolge (ähnlich wie DB-Verbindungszeichenfolgen) zu erfassen.

Redis Connection Strings unterstützt mehrere URI-ähnliche Formate von einem einfachen Hostnamen oder IP-Adresse und Port mit einem vollständig qualifizierten URI paaren mit mehreren im QueryString angegebenen Optionen.

Einige Beispiele unterstützter Formate:

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

INFO

Weitere Beispiele finden Sie in ConfigTests.cs

Jede zusätzliche Konfiguration kann als QueryString-Parameter angegeben werden. Die vollständige Liste der Optionen, die angegeben werden können, umfasst:

Ssl Bool Wenn es sich um eine SSL-Verbindung handelt
Datenbank int Die Redis DB, auf die diese Verbindung gesetzt werden sollte
Kunde Zeichenfolge Ein Textalias, der für diese Verbindung zu Analysezwecken angegeben werden soll
Passwort Zeichenfolge UrlEncoded-Version des Passworts für diese Verbindung
ConnectTimeout int Timeout in ms für das Herstellen einer TCP-Socket-Verbindung
Zeitüberschreitung beim Senden int Timeout in ms für einen synchronen TCP-Socket-Send
ReceiveTimeout int Timeout in ms für das Warten auf einen synchronen TCP Socket Receive
IdleTimeOutSecs int Timeout in Sekunden, damit eine inaktive Verbindung als aktiv angesehen wird
NamespacePräfix Zeichenfolge Verwenden Sie ein benutzerdefiniertes Präfix für interne Indexsammlungen von ServiceStack.Redis

ServiceStack.Redis SSL-Unterstützung #

ServiceStack.Redis unterstützt SSL-Verbindungen Dadurch eignet es sich für den Zugriff auf entfernte Redis-Serverinstanzen über eine sichere SSL-Verbindung .

SSL-Protokollnummer angeben

Die Unterstützung zum Ändern der für verschlüsselte SSL-Verbindungen verwendeten SSL-Protokolle kann mithilfe von sslprotocols in der Verbindungszeichenfolge festgelegt werden Modifikator, z. B.:

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

Herstellen einer Verbindung mit Azure Redis #

Da die Verbindung mit Azure Redis Cache über SSL der primäre Anwendungsfall für diese Funktion war, haben wir eine neue Verbindung mit Azure Redis über SSL herstellen hinzugefügt, um Ihnen den Einstieg zu erleichtern.

Redis GEO #

Die Veröffentlichung von Redis 3.2.0 bringt aufregende neue GEO-Funktionen, mit denen Sie Lat/Long-Koordinaten in Redis speichern und Standorte innerhalb eines bestimmten Radius abfragen können. Um diese Funktionalität zu demonstrieren, haben wir eine neue Redis GEO Live-Demo erstellt, mit der Sie überall in den USA auf klicken können, um die Liste der nächstgelegenen Städte in einem bestimmten Umkreis zu finden, Live-Demo unter:https://redis.netcore.io

Redis Client Managers #

Der empfohlene Weg für den Zugriff auf RedisClient Instanzen besteht darin, einen der unten verfügbaren Thread-Safe-Client-Manager zu verwenden. Client-Manager sind Verbindungsfabriken, die als Singleton entweder in Ihrer IOC- oder statischen Klasse registriert werden sollten.

RedisManagerPool #

Mit den verbesserten Redis-URI-Verbindungszeichenfolgen konnten wir den vorhandenen PooledRedisClientManager vereinfachen und rationalisieren Implementierung und haben sie in einen neuen Client-Manager namens RedisManagerPool extrahiert .

Zusätzlich zum Entfernen aller oben genannten Optionen im Client Manager selbst wurden auch schreibgeschützte Verbindungszeichenfolgen entfernt, sodass die Konfiguration viel einfacher und besser auf den allgemeinen Anwendungsfall abgestimmt ist:

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

Pooling-Verhalten

Alle Verbindungen, die erforderlich sind, nachdem die maximale Poolgröße erreicht wurde, werden erstellt und außerhalb des Pools verworfen. Indem es nicht auf eine maximale Poolgröße beschränkt ist, wird das Pooling-Verhalten in RedisManagerPool kann eine kleinere Verbindungspoolgröße auf Kosten einer möglicherweise höheren Anzahl geöffneter/geschlossener Verbindungen beibehalten.

PooledRedisClientManager #

Wenn Sie es vorziehen, Optionen im Client Manager selbst zu definieren oder separate Redis-Server mit Lese-/Schreibzugriff und ReadOnly (d. h. Master und Replica) bereitzustellen, verwenden Sie den PooledRedisClientManager stattdessen:

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

Pooling-Verhalten

Der PooledRedisClientManager legt ein maximales Verbindungslimit fest und blockiert bei Erreichen der maximalen Poolgröße stattdessen alle neuen Verbindungsanforderungen bis zum nächsten RedisClient wird wieder in den Pool entlassen. Wenn innerhalb von PoolTimeout kein Client verfügbar wurde , eine Pool-TimeoutException wird geworfen.

Schreibgeschützte Clients #

Standardmäßig wird ein RedisClient mit GetRedisClient() aufgelöst oder GetRedisClientAsync() gibt einen Client zurück, der mit dem konfigurierten primären (Master-)Host verbunden ist. Wenn Sie auch Replikat- (Slave-)Hosts konfiguriert haben, können Sie mit GetReadOnlyClient() darauf zugreifen oder GetReadOnlyClientAsync() APIs, z. B.:

using var redisReadOnly = clientsManager.GetReadOnlyClient();

BasicRedisClientManager #

Wenn Sie kein Verbindungspooling verwenden möchten (d. h. Sie greifen auf eine lokale Redis-Server-Instanz zu), können Sie einen einfachen (nicht gepoolten) Clients Manager verwenden, der einen neuen RedisClient erstellt Instanz jedes Mal:

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

Zugriff auf den Redis-Client #

Nach der Registrierung ist der Zugriff auf den RedisClient in allen Client Managern gleich, z. B.:

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

Eine detailliertere Liste der verfügbaren RedisClient-APIs, die im Beispiel verwendet werden, finden Sie in den folgenden C#-Schnittstellen:

  • IRedisClientsManager
  • IRedisClient
  • IRedisNativeClient
  • IRedisSubscription

Pipeline- und Transaktions-APIs #

  • IRedisTransaction
  • IRedisPipelineShared
  • IRedisQueueableOperation
  • IRedisQueueCompletableOperation

Generische Client-APIs #

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

Serversammlungs-APIs #

  • IRedisHash
  • IRedisList
  • IRedisSet
  • IRedisSortedSet

Async Redis #

Die asynchrone Unterstützung in ServiceStack.Redis ist auf optimale Effizienz ausgelegt und verwendet ValueTask &andere moderne Async-APIs, die nur in .NET Standard 2.0 verfügbar sind und .NET Framework v4.7.2+ Projekte, in denen es asynchrone API-Äquivalente für die meisten Synchronisierungs-APIs gibt, wie sie in den folgenden Async Redis-Schnittstellen enthalten sind:

  • IRedisClientsManagerAsync
  • IRedisClientAsync
  • IRedisNativeClientAsync
  • IRedisSubscriptionAsync

Asynchrone Pipeline- und Transaktions-APIs #

  • IRedisTransactionAsync
  • IRedisPipelineSharedAsync
  • IRedisQueueableOperationAsync
  • IRedisQueueCompletableOperationAsync

Asynchrone generische Client-APIs #

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

Async Server Collection APIs #

  • IRedisHashAsync
  • IRedisListAsync
  • IRedisSetAsync
  • IRedisSortedSetAsync