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