sql >> Databasteknik >  >> NoSQL >> Redis

Hantera anslutningar

Redis Connection Strings #

Redis Connection-strängar har utökats för att stödja det mer mångsidiga URI-formatet som nu kan fånga de flesta Redis Client-inställningar i en enda anslutningssträng (liknande DB Connection-strängar).

Redis Connection Strings stöder flera URI-liknande format, från ett enkelt värdnamn eller IP-adress och port koppla ihop till en fullt kvalificerad URI med flera alternativ specificerade i QueryString.

Några exempel på format som stöds:

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

Fler exempel kan ses i ConfigTests.cs

Alla ytterligare konfigurationer kan anges som QueryString-parametrar. Den fullständiga listan över alternativ som kan specificeras inkluderar:

Ssl bool Om detta är en SSL-anslutning
Db int Redis DB denna anslutning bör ställas in på
Kund sträng Ett textalias att specificera för denna anslutning för analytiska ändamål
Lösenord sträng UrlEncoded version av lösenordet för den här anslutningen
ConnectTimeout int Timeout i ms för att skapa en TCP Socket-anslutning
SändTimeout int Timeout i ms för att göra en synkron TCP Socket Send
ReceiveTimeout int Timeout i ms för att vänta på en synkron TCP-socketmottagning
IdleTimeOutSecs int Timeout i sekunder för att en ledig anslutning ska anses vara aktiv
Namnutrymmesprefix sträng Använd ett anpassat prefix för ServiceStack.Redis interna indexinsamlingar

ServiceStack.Redis SSL Support #

ServiceStack.Redis stöder SSL-anslutningar vilket gör den lämplig för åtkomst till Redis-serverinstanser på fjärranslutning via en säker SSL-anslutning .

Ange SSL-protokollnummer

Stöd för att ändra Ssl-protokollen som används för krypterade SSL-anslutningar kan ställas in på anslutningssträngen med sslprotocols modifierare, t.ex.:

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

Ansluter till Azure Redis #

Eftersom anslutning till Azure Redis Cache via SSL var det primära användningsfallet för den här funktionen, har vi lagt till en ny Komma igång med Azure Redis via SSL för att hjälpa dig komma igång.

Redis GEO #

Utgivningen av Redis 3.2.0 ger den nya spännande GEO-funktioner som låter dig lagra Lat/Long-koordinater i Redis och fråga efter platser inom en specificerad radie. För att demonstrera denna funktionalitet har vi skapat en ny Redis GEO Live Demo som låter dig klicka på var som helst i USA för att hitta listan över närmaste städer inom en given radie, Live Demo på:https://redis.netcore.io

Redis Client Managers #

Det rekommenderade sättet att komma åt RedisClient instanser är att använda en av de tillgängliga trådsäkra klienthanterarna nedan. Klienthanterare är anslutningsfabriker som bör registreras som Singleton antingen i din IOC eller statisk klass.

RedisManagerPool #

Med de förbättrade Redis URI Connection Strings har vi kunnat förenkla och effektivisera den befintliga PooledRedisClientManager implementering och har extraherat det till en ny klienthanterare som heter RedisManagerPool .

Förutom att ta bort alla ovanstående alternativ på själva klienthanteraren, har skrivskyddade anslutningssträngar också tagits bort så konfigurationen blir mycket enklare och mer anpassad till det vanliga användningsfallet:

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

Poolingbeteende

Alla anslutningar som krävs efter att den maximala poolstorleken har uppnåtts kommer att skapas och kasseras utanför poolen. Genom att inte vara begränsad till en maximal poolstorlek, kan poolningsbeteendet i RedisManagerPool kan bibehålla en mindre anslutningspoolstorlek till priset av att det potentiellt har ett högre antal öppnade/stängda anslutningar.

PooledRedisClientManager #

Om du föredrar att definiera alternativ på själva klienthanteraren eller om du vill tillhandahålla separata Read/Write och ReadOnly (d.v.s. Master och Replica) redis-servrar, använd PooledRedisClientManager istället:

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

Poolingbeteende

PooledRedisClientManager inför en maximal anslutningsgräns och när dess maximala poolstorlek har uppnåtts kommer istället alla nya anslutningsförfrågningar att blockeras tills nästa RedisClient släpps tillbaka i poolen. Om ingen klient blev tillgänglig inom PoolTimeout , en pool TimeoutException kommer att kastas.

Skrivskyddade kunder #

Som standard löser man en RedisClient med GetRedisClient() eller GetRedisClientAsync() kommer att returnera en klient som är ansluten till den konfigurerade primära (master) värden, om du också har replika (slav) värdar konfigurerade kan du komma åt den med GetReadOnlyClient() eller GetReadOnlyClientAsync() API:er, t.ex.:

using var redisReadOnly = clientsManager.GetReadOnlyClient();

BasicRedisClientManager #

Om du inte vill använda anslutningspoolning (dvs. du kommer åt en lokal redis-serverinstans) kan du använda en grundläggande (icke-poolad) klienthanterare som skapar en ny RedisClient instans varje gång:

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

Åtkomst till Redis Client #

När du väl har registrerat dig är åtkomsten till RedisClient densamma för alla kundansvariga, t.ex.:

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 mer detaljerad lista över tillgängliga RedisClient API:er som används i exemplet kan ses i C#-gränssnitten nedan:

  • IRedisClientsManager
  • IRedisClient
  • IRedisNativeClient
  • IRedisSubscription

Pipeline &Transaction APIs #

  • IRedisTransaction
  • IRedisPipelineShared
  • IRedisQueueableOperation
  • IRedisQueueCompletableOperation

Allmänna klient-API:er #

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

Server Collection API:er #

  • IRedisHash
  • IRedisList
  • IRedisSet
  • IRedisSortedSet

Async Redis #

Asynkronstödet i ServiceStack.Redis är designat för optimal effektivitet och använder ValueTask &andra moderna Async API:er endast tillgängliga i .NET Standard 2.0 och .NET Framework v4.7.2+ projekt där det finns ekvivalenter för async API för de flesta sync API:er som finns i Async Redis-gränssnitten nedan:

  • IRedisClientsManagerAsync
  • IRedisClientAsync
  • IRedisNativeClientAsync
  • IRedisSubscriptionAsync

Async Pipeline &Transaction APIs #

  • IRedisTransactionAsync
  • IRedisPipelineSharedAsync
  • IRedisQueueableOperationAsync
  • IRedisQueueCompletableOperationAsync

Async Generic Client APIs #

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

Async Server Collection API:er #

  • IRedisHashAsync
  • IRedisListAsync
  • IRedisSetAsync
  • IRedisSortedSetAsync

  1. Hur man ansluter Robomongo till MongoDB

  2. Att uppdatera sökvägen 'x' skulle skapa en konflikt vid 'x'

  3. MongoDB $degreesToRadians

  4. MongoDB punkt (.) i nyckelnamn