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

Håndtering af forbindelser

Redis-forbindelsesstrenge #

Redis Connection-strenge er blevet udvidet til at understøtte det mere alsidige URI-format, som nu er i stand til at fange de fleste Redis-klientindstillinger i en enkelt forbindelsesstreng (beslægtet med DB Connection-strenge).

Redis Connection Strings understøtter flere URI-lignende formater fra et simpelt værtsnavn eller IP-adresse og port parre til en fuldt kvalificeret URI med flere muligheder angivet på QueryString.

Nogle eksempler på understøttede formater:

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

Flere eksempler kan ses i ConfigTests.cs

Enhver yderligere konfiguration kan angives som QueryString-parametre. Den fulde liste over muligheder, der kan specificeres, omfatter:

Ssl bool Hvis dette er en SSL-forbindelse
Db int Redis DB, denne forbindelse skal indstilles til
Kunde streng Et tekstalias, der skal specificeres for denne forbindelse til analytiske formål
Adgangskode streng UrlEncoded version af adgangskoden til denne forbindelse
ConnectTimeout int Timeout i ms for at oprette en TCP Socket-forbindelse
SendTimeout int Timeout i ms for at lave en synkron TCP Socket Send
ReceiveTimeout int Timeout i ms for at vente på en synkron TCP-socket-modtagelse
IdleTimeOutSecs int Timeout i sekunder, før en inaktiv forbindelse betragtes som aktiv
Navneområdepræfiks streng Brug et tilpasset præfiks til ServiceStack.Redis interne indeksindsamlinger

ServiceStack.Redis SSL Support #

ServiceStack.Redis understøtter SSL-forbindelser hvilket gør det egnet til at få adgang til eksterne Redis-serverforekomster over en sikker SSL-forbindelse .

Angiv SSL-protokol nr.

Understøttelse af ændring af Ssl-protokollerne, der bruges til krypterede SSL-forbindelser, kan indstilles på forbindelsesstrengen ved hjælp af sslprotocols modifikator, f.eks.:

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

Opretter forbindelse til Azure Redis #

Da tilslutning til Azure Redis Cache via SSL var den primære use-case for denne funktion, har vi tilføjet en ny Kom godt i gang med Azure Redis via SSL for at hjælpe dig i gang.

Redis GEO #

Udgivelsen af ​​Redis 3.2.0 bringer det spændende nye GEO-funktioner, som giver dig mulighed for at gemme Lat/Long-koordinater i Redis og forespørge steder inden for en specificeret radius. For at demonstrere denne funktionalitet har vi oprettet en ny Redis GEO Live Demo, som lader dig klikke på hvor som helst i USA for at finde listen over nærmeste byer inden for en given radius, Live Demo på:https://redis.netcore.io

Redis Client Managers #

Den anbefalede måde at få adgang til RedisClient instanser er at bruge en af ​​de tilgængelige trådsikre klientadministratorer nedenfor. Client Managers er forbindelsesfabrikker, der skal registreres som en Singleton enten i din IOC eller statiske klasse.

RedisManagerPool #

Med de forbedrede Redis URI Connection Strings har vi været i stand til at forenkle og strømline den eksisterende PooledRedisClientManager implementering og har udvundet det til en ny klientadministrator kaldet RedisManagerPool .

Ud over at fjerne alle ovennævnte muligheder på selve klientadministratoren, er skrivebeskyttede forbindelsesstrenge også blevet fjernet, så konfigurationen ender meget enklere og mere tilpasset den almindelige use-case:

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

Pooling-adfærd

Eventuelle forbindelser, der kræves, efter at den maksimale poolstørrelse er nået, vil blive oprettet og bortskaffet uden for poolen. Ved ikke at være begrænset til en maksimal poolstørrelse, vil poolingadfærden i RedisManagerPool kan opretholde en mindre forbindelsespuljestørrelse på bekostning af potentielt at have et højere antal åbne/lukkede forbindelser.

PooledRedisClientManager #

Hvis du foretrækker at definere indstillinger på selve klientadministratoren, eller du ønsker at levere separate læse/skrive- og skrivebeskyttede (dvs. master og replika) redis-servere, skal du bruge PooledRedisClientManager i stedet:

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

Pooling-adfærd

PooledRedisClientManager pålægger en maksimal forbindelsesgrænse, og når dens maksimale poolstørrelse er nået, vil den i stedet blokere for eventuelle nye forbindelsesanmodninger indtil den næste RedisClient slippes tilbage i poolen. Hvis ingen klient blev tilgængelig inden for PoolTimeout , en pool TimeoutException vil blive smidt.

Skrivebeskyttet klient #

Som standard løses en RedisClient med GetRedisClient() eller GetRedisClientAsync() returnerer en klient forbundet til den konfigurerede primære (master) vært. Hvis du også har konfigureret replika (slave) værter, kan du få adgang til den med GetReadOnlyClient() eller GetReadOnlyClientAsync() API'er, f.eks.:

using var redisReadOnly = clientsManager.GetReadOnlyClient();

BasicRedisClientManager #

Hvis du ikke ønsker at bruge forbindelsespooling (dvs. du har adgang til en lokal redis-serverinstans), kan du bruge en grundlæggende (ikke-poolet) Clients Manager, som opretter en ny RedisClient forekomst hver gang:

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

Adgang til Redis Client #

Når først du er registreret, er adgangen til RedisClient den samme for alle kundeadministratorer, f.eks.:

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

En mere detaljeret liste over de tilgængelige RedisClient API'er brugt i eksemplet kan ses i C#-grænsefladerne nedenfor:

  • IRedisClientsManager
  • IRedisClient
  • IRedisNativeClient
  • IRedisSubscription

Pipeline &Transaction API'er #

  • IRedisTransaction
  • IRedisPipelineShared
  • IRedisQueueableOperation
  • IRedisQueueCompletableOperation

Generiske klient-API'er #

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

Server Collection API'er #

  • IRedisHash
  • IRedisList
  • IRedisSet
  • IRedisSortedSet

Async Redis #

Asynkron-understøttelsen i ServiceStack.Redis er designet til optimal effektivitet og bruger ValueTask &andre moderne Async API'er kun tilgængelige i .NET Standard 2.0 og .NET Framework v4.7.2+ projekter, hvor der er async API-ækvivalenter for de fleste sync API'er som indeholdt i Async Redis-grænsefladerne nedenfor:

  • IRedisClientsManagerAsync
  • IRedisClientAsync
  • IRedisNativeClientAsync
  • IRedisSubscriptionAsync

Async Pipeline &Transaction API'er #

  • IRedisTransactionAsync
  • IRedisPipelineSharedAsync
  • IRedisQueueableOperationAsync
  • IRedisQueueCompletableOperationAsync

Async Generic Client API'er #

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

Async Server Collection API'er #

  • IRedisHashAsync
  • IRedisListAsync
  • IRedisSetAsync
  • IRedisSortedSetAsync

  1. redis til logning

  2. MongoDB Backup Management Tips til Sharded Clusters

  3. Redis datastrukturdesign til sortering af tidsbaserede værdier

  4. MongoDB - Opret en samling