sql >> Database >  >> NoSQL >> Redis

Verbindingen beheren

Redis-verbindingsreeksen #

Redis Connection-strings zijn uitgebreid om het meer veelzijdige URI-formaat te ondersteunen dat nu de meeste Redis Client-instellingen kan vastleggen in een enkele connectiestring (vergelijkbaar met DB Connection-strings).

Redis Connection Strings ondersteunt meerdere URI-achtige formaten, vanaf een eenvoudige hostnaam of IP-adres en poort koppelen aan een volledig gekwalificeerde URI met meerdere opties gespecificeerd in de QueryString.

Enkele voorbeelden van ondersteunde formaten:

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

Meer voorbeelden zijn te zien in ConfigTests.cs

Elke aanvullende configuratie kan worden opgegeven als QueryString-parameters. De volledige lijst met opties die kunnen worden gespecificeerd, omvat:

Ssl boe Als dit een SSL-verbinding is
DB int De Redis DB waarop deze verbinding moet worden ingesteld
Klant tekenreeks Een tekstalias om voor deze verbinding op te geven voor analytische doeleinden
Wachtwoord tekenreeks Url-gecodeerde versie van het wachtwoord voor deze verbinding
ConnectTimeout int Time-out in ms voor het maken van een TCP Socket-verbinding
SendTimeout int Time-out in ms voor het maken van een synchrone TCP Socket Send
ReceiveTimeout int Time-out in ms voor het wachten op een synchrone TCP Socket-ontvangst
IdleTimeOutSecs int Time-out in seconden voor een inactieve verbinding om als actief te worden beschouwd
NamespacePrefix tekenreeks Gebruik een aangepast voorvoegsel voor ServiceStack.Redis interne indexverzamelingen

ServiceStack.Redis SSL-ondersteuning #

ServiceStack.Redis ondersteunt SSL-verbindingen waardoor het geschikt is voor toegang tot externe Redis-serverinstanties via een beveiligde SSL-verbinding .

Specificeer SSL-protocol #

Ondersteuning voor het wijzigen van de SSL-protocollen die worden gebruikt voor versleutelde SSL-verbindingen kan worden ingesteld op de verbindingsreeks met behulp van de sslprotocols modifier, bijv.:

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

Verbinding maken met Azure Redis #

Omdat verbinding maken met Azure Redis Cache via SSL de primaire use-case voor deze functie was, hebben we een nieuwe verbinding maken met Azure Redis via SSL toegevoegd om u op weg te helpen.

Redis GEO #

De release van Redis 3.2.0 brengt opwindende nieuwe GEO-mogelijkheden waarmee je Lat/Long-coördinaten in Redis kunt opslaan en locaties binnen een gespecificeerde straal kunt opvragen. Om deze functionaliteit te demonstreren hebben we een nieuwe Redis GEO Live Demo gemaakt waarmee je overal in de VS kunt klikken om de lijst met dichtstbijzijnde steden binnen een bepaalde straal te vinden, Live Demo op:https://redis.netcore.io

Redis Client Managers #

De aanbevolen manier om toegang te krijgen tot RedisClient instances is om een ​​van de beschikbare Thread-Safe Client Managers hieronder te gebruiken. Client Managers zijn verbindingsfabrieken die moeten worden geregistreerd als Singleton in uw IOC- of statische klasse.

RedisManagerPool #

Met de verbeterde Redis URI Connection Strings hebben we de bestaande PooledRedisClientManager kunnen vereenvoudigen en stroomlijnen. implementatie en heb het uitgepakt in een nieuwe klantenmanager genaamd RedisManagerPool .

Naast het verwijderen van alle bovenstaande opties op de Client Manager zelf, zijn ook alleen-lezen verbindingsreeksen verwijderd, zodat de configuratie veel eenvoudiger en meer in lijn is met de algemene use-case:

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

Poolgedrag

Eventuele verbindingen die nodig zijn nadat de maximale poolgrootte is bereikt, worden buiten de pool gemaakt en verwijderd. Door niet te worden beperkt tot een maximale poolgrootte, is het poolgedrag in RedisManagerPool kan een kleinere verbindingspool behouden ten koste van mogelijk een hoger aantal geopende/gesloten verbindingen.

PooledRedisClientManager #

Als u liever opties definieert op de Client Manager zelf of als u aparte Read/Write en ReadOnly (d.w.z. Master en Replica) redis-servers wilt voorzien, gebruik dan de PooledRedisClientManager in plaats daarvan:

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

Poolgedrag

De PooledRedisClientManager legt een maximale verbindingslimiet op en wanneer de maximale poolgrootte is bereikt, worden in plaats daarvan nieuwe verbindingsverzoeken geblokkeerd tot de volgende RedisClient wordt weer vrijgelaten in het zwembad. Als er geen client beschikbaar kwam binnen PoolTimeout , een pool TimeoutException zal worden gegooid.

Alleen-lezen clients #

Standaard een RedisClient oplossen met GetRedisClient() of GetRedisClientAsync() zal een client retourneren die is verbonden met de geconfigureerde primaire (master) host, als u ook replica (slave) hosts hebt geconfigureerd, kunt u deze openen met de GetReadOnlyClient() of GetReadOnlyClientAsync() API's, bijv.:

using var redisReadOnly = clientsManager.GetReadOnlyClient();

BasicRedisClientManager #

Als u geen gebruik wilt maken van pooling van verbindingen (d.w.z. u hebt toegang tot een lokale redis-server-instantie), kunt u een standaard (niet-gepoolde) Clients Manager gebruiken die een nieuwe RedisClient aanmaakt elke keer:

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

Toegang tot de Redis-client #

Eenmaal geregistreerd, is toegang tot de RedisClient hetzelfde in alle Client Managers, bijvoorbeeld:

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

Een meer gedetailleerde lijst van de beschikbare RedisClient-API's die in het voorbeeld worden gebruikt, is te zien in de onderstaande C#-interfaces:

  • IRedisClientsManager
  • IRedisClient
  • IRedisNativeClient
  • IRedisSubscription

Pijplijn- en transactie-API's #

  • IRedisTransaction
  • IRedisPipelineShared
  • IRedisQueueableOperation
  • IRedisQueueCompletableOperation

Algemene client-API's #

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

Server Collection API's #

  • IRedisHash
  • IRedisList
  • IRedisSet
  • IRedisSortedSet

Async Redis #

De async-ondersteuning in ServiceStack.Redis is ontworpen voor optimale efficiëntie en maakt gebruik van ValueTask en andere moderne Async API's alleen beschikbaar in .NET Standard 2.0 en .NET Framework v4.7.2+ projecten met asynchrone API-equivalenten voor de meeste synchronisatie-API's zoals opgenomen in de onderstaande Async Redis-interfaces:

  • IRedisClientsManagerAsync
  • IRedisClientAsync
  • IRedisNativeClientAsync
  • IRedisSubscriptionAsync

Async-pijplijn- en transactie-API's #

  • IRedisTransactionAsync
  • IRedisPipelineSharedAsync
  • IRedisQueueableOperationAsync
  • IRedisQueueCompletableOperationAsync

Async Generic Client API's #

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

Async Server Collection-API's #

  • IRedisHashAsync
  • IRedisListAsync
  • IRedisSetAsync
  • IRedisSortedSetAsync

  1. Mongoose.js-query's synchroon laten lopen

  2. MongoDB 'kan index voor $geoNear-query niet vinden'

  3. ElastiCache-integratie starten

  4. Mangoest verschil tussen .save() en het gebruik van update()