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