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