Redis
 sql >> Database >  >> NoSQL >> Redis

Gestione delle connessioni

Stringhe di connessione Redis #

Le stringhe di connessione Redis sono state ampliate per supportare il formato URI più versatile che ora è in grado di acquisire la maggior parte delle impostazioni del client Redis in un'unica stringa di connessione (simile alle stringhe di connessione DB).

Redis Connection Strings supporta più formati simili a URI, da un semplice nome host o Indirizzo IP e porta accoppiare a un URI pienamente qualificato con più opzioni specificate in QueryString.

Alcuni esempi di formati supportati:

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

Altri esempi possono essere visualizzati in ConfigTests.cs

Qualsiasi configurazione aggiuntiva può essere specificata come parametri QueryString. L'elenco completo delle opzioni che possono essere specificate include:

SSl bollo Se questa è una connessione SSL
Reb int Il DB Redis su cui deve essere impostata questa connessione
Cliente stringa Un alias di testo da specificare per questa connessione a fini analitici
Password stringa Versione UrlEncoded della Password per questa connessione
Timeout connessione int Timeout in ms per la creazione di una connessione TCP Socket
SendTimeout int Timeout in ms per l'invio sincrono di TCP Socket
ReceiveTimeout int Timeout in ms per l'attesa di una ricezione socket TCP sincrona
IdleTimeOutSec int Timeout in secondi per considerare attiva una connessione inattiva
Prefisso spazio dei nomi stringa Utilizza un prefisso personalizzato per le raccolte di indici interni ServiceStack.Redis

Supporto SSL ServiceStack.Redis #

ServiceStack.Redis supporta connessioni SSL rendendolo adatto per accedere a istanze del server Redis remote tramite una connessione SSL sicura .

Specifica protocollo SSL #

Il supporto per la modifica dei protocolli SSL utilizzati per le connessioni SSL crittografate può essere impostato sulla stringa di connessione utilizzando sslprotocols modificatore, ad esempio:

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

Connessione ad Azure Redis #

Poiché la connessione ad Azure Redis Cache tramite SSL era il caso d'uso principale per questa funzionalità, abbiamo aggiunto una nuova connessione ad Azure Redis tramite SSL per aiutarti a iniziare.

Redis GEO #

Il rilascio di Redis 3.2.0 offre nuove entusiasmanti funzionalità GEO che ti permetteranno di memorizzare le coordinate Lat/Long in Redis e di interrogare le posizioni entro un raggio specificato. Per dimostrare questa funzionalità abbiamo creato una nuova Redis GEO Live Demo che ti consente di fare clic in qualsiasi punto degli Stati Uniti per trovare l'elenco delle città più vicine entro un determinato raggio, Live Demo su:https://redis.netcore.io

Redis Client Manager #

Il modo consigliato per accedere a RedisClient istanze consiste nell'utilizzare uno dei gestori client thread-safe disponibili di seguito. I Client Manager sono fabbriche di connessione che dovrebbero essere registrate come Singleton nella tua classe IOC o statica.

RedisManagerPool #

Con le stringhe di connessione URI Redis migliorate siamo stati in grado di semplificare e ottimizzare il PooledRedisClientManager esistente implementazione e l'ho estratto in un nuovo client manager chiamato RedisManagerPool .

Oltre a rimuovere tutte le opzioni di cui sopra sullo stesso Client Manager, sono state rimosse anche le stringhe di connessione di sola lettura in modo che la configurazione risulti molto più semplice e allineata al caso d'uso comune:

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

Comportamento di pooling

Eventuali connessioni richieste dopo il raggiungimento della dimensione massima del Pool verranno create e smaltite al di fuori del Pool. Non essendo limitato a una dimensione massima del pool, il comportamento del pool in RedisManagerPool può mantenere una dimensione del pool di connessioni più piccola a costo di avere potenzialmente un numero di connessioni aperte/chiuse maggiore.

PooledRedisClientManager #

Se si preferisce definire le opzioni sullo stesso Client Manager o si desidera fornire server redis separati di Lettura/Scrittura e Sola Lettura (ovvero Master e Replica), utilizzare il PooledRedisClientManager invece:

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

Comportamento di pooling

Il PooledRedisClientManager impone un limite massimo di connessione e quando viene raggiunta la dimensione massima del pool bloccherà invece qualsiasi nuova richiesta di connessione fino al prossimo RedisClient viene rilasciato nuovamente in piscina. Se nessun client diventasse disponibile entro PoolTimeout , un pool TimeoutException verrà lanciato.

Clienti di sola lettura #

Per impostazione predefinita, risolvendo un RedisClient con GetRedisClient() o GetRedisClientAsync() restituirà un client connesso all'host primario (master) configurato, se hai configurato anche host di replica (slave), puoi accedervi con GetReadOnlyClient() o GetReadOnlyClientAsync() API, ad esempio:

using var redisReadOnly = clientsManager.GetReadOnlyClient();

BasicRedisClientManager #

Se non desideri utilizzare il pool di connessioni (ovvero stai accedendo a un'istanza del server redis locale) puoi utilizzare un Client Manager di base (non in pool) che crea un nuovo RedisClient istanza ogni volta:

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

Accesso al client Redis #

Una volta registrati, l'accesso al RedisClient è lo stesso in tutti i Gestori Clienti, ad esempio:

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

Un elenco più dettagliato delle API RedisClient disponibili utilizzate nell'esempio può essere visualizzato nelle interfacce C# seguenti:

  • IRedisClientsManager
  • IRedisClient
  • IRedisNativeClient
  • IredisSubscription

Pipeline &Transaction API #

  • IRedisTransazione
  • IRedisPipelineShared
  • Operazione IRedisQueueable
  • IRedisQueueCompletableOperation

API client generiche #

  • IRedisTypedClient
  • IRedisHash
  • Lista IRedis
  • RedisSet
  • IRedisSortedSet
  • IRedisTypedQueueableOperation

API di raccolta server #

  • IRedisHash
  • Lista IRedis
  • RedisSet
  • IRedisSortedSet

Redis asincrono #

Il supporto asincrono in ServiceStack.Redis è progettato per un'efficienza ottimale e utilizza ValueTask e altre moderne API Async disponibili solo in .NET Standard 2.0 e .NET Framework v4.7.2+ progetti in cui sono disponibili equivalenti API asincroni per la maggior parte delle API di sincronizzazione contenute nelle interfacce Redis Async di seguito:

  • IRedisClientsManagerAsync
  • IRedisClientAsync
  • IRedisNativeClientAsync
  • IRedisSubscriptionAsync

Async Pipeline &Transaction API #

  • IRedisTransactionAsync
  • IRedisPipelineSharedAsync
  • IRedisQueueableOperationAsync
  • IRedisQueueCompletableOperationAsync

API client generiche asincrone #

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

API Async Server Collection #

  • IRedisHashAsync
  • IRedisListAsync
  • IRedisSetAsync
  • IRedisSortedSetAsync