Připojovací řetězce Redis #
Řetězce připojení Redis byly rozšířeny, aby podporovaly všestrannější formát URI, který je nyní schopen zachytit většinu nastavení klienta Redis do jediného připojovacího řetězce (podobné řetězcům DB Connection).
Redis Connection Strings podporuje několik formátů podobných URI, od jednoduchého názvu hostitele nebo IP adresa a port spárovat s plně kvalifikovaným URI s více možnostmi specifikovanými v QueryString.
Některé příklady podporovaných formátů:
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
Další příklady lze vidět na ConfigTests.cs
Jakoukoli další konfiguraci lze zadat jako parametry QueryString. Úplný seznam možností, které lze specifikovat, zahrnuje:
Ssl | bool | Pokud se jedná o připojení SSL |
Db | int | Redis DB toto připojení by mělo být nastaveno na |
Klient | řetězec | Textový alias pro toto připojení pro analytické účely |
Heslo | řetězec | Verze hesla pro toto připojení s kódováním URL |
ConnectTimeout | int | Časový limit v ms pro vytvoření připojení TCP Socket |
Časový limit odeslání | int | Časový limit v ms pro provedení synchronního odesílání TCP Socket |
Časový limit příjmu | int | Časový limit v ms pro čekání na synchronní příjem TCP Socketu |
IdleTimeOutSecs | int | Časový limit v sekundách, aby bylo nečinné připojení považováno za aktivní |
Předpona jmenného prostoru | řetězec | Použijte vlastní předponu pro interní kolekce indexů ServiceStack.Redis |
Podpora ServiceStack.Redis SSL #
ServiceStack.Redis podporuje SSL připojení takže je vhodný pro přístup k vzdáleným instancím serveru Redis přes zabezpečené připojení SSL .
Zadejte protokol SSL #
Podporu pro změnu protokolů Ssl používaných pro šifrovaná připojení SSL lze nastavit na připojovacím řetězci pomocí sslprotocols
modifikátor, např.:
var connString = $"redis://{Host}?ssl=true&sslprotocols=Tls12&password={Password.UrlEncode()}";
var redisManager = new RedisManagerPool(connString);
using var client = redisManager.GetClient();
//...
Připojování k Azure Redis #
Protože připojení k mezipaměti Azure Redis přes SSL bylo primárním případem použití této funkce, přidali jsme nové Připojení k Azure Redis přes SSL, které vám pomůže začít.
Redis GEO #
Vydání Redis 3.2.0 přináší vzrušující nové funkce GEO, které vám umožní ukládat souřadnice Lat/Long v Redis a vyhledávat místa v určeném okruhu. Abychom tuto funkci předvedli, vytvořili jsme nové živé demo Redis GEO, které vám umožní kliknutím na libovolné místo v USA najít seznam nejbližších měst v daném okruhu, živé demo na:https://redis.netcore.io
Správci klientů Redis #
Doporučený způsob přístupu k RedisClient
instance je použít jeden z dostupných Thread-Safe Client Manager níže. Client Managers jsou továrny na připojení, které by měly být registrovány jako Singleton buď ve vaší IOC nebo statické třídě.
RedisManagerPool #
Díky vylepšeným připojovacím řetězcům Redis URI jsme byli schopni zjednodušit a zefektivnit stávající PooledRedisClientManager
implementaci a extrahovali jej do nového správce klientů s názvem RedisManagerPool
.
Kromě odstranění všech výše uvedených možností v samotném Správci klientů byly také odstraněny připojovací řetězce pouze pro čtení, takže konfigurace je mnohem jednodušší a lépe přizpůsobená běžnému případu použití:
container.Register<IRedisClientsManager>(c =>
new RedisManagerPool(redisConnectionString));
Chování při sdružování
Všechna připojení požadovaná po dosažení maximální velikosti fondu budou vytvořena a odstraněna mimo fond. Tím, že není omezena na maximální velikost fondu, chování fondu v RedisManagerPool
může udržovat menší velikost fondu připojení za cenu potenciálního vyššího počtu otevřených/uzavřených připojení.
PooledRedisClientManager #
Pokud dáváte přednost definování možností v samotném správci klientů nebo chcete poskytovat samostatné servery pro čtení/zápis a pouze pro čtení (tj. Master a Replica), použijte PooledRedisClientManager
místo toho:
container.Register<IRedisClientsManager>(c =>
new PooledRedisClientManager(redisReadWriteHosts, redisReadOnlyHosts) {
ConnectTimeout = 100,
//...
});
Chování při sdružování
PooledRedisClientManager
zavádí maximální limit připojení a po dosažení maximální velikosti fondu bude místo toho blokovat jakékoli nové požadavky na připojení až do příštího RedisClient
je vypuštěn zpět do bazénu. Pokud během PoolTimeout
nebyl dostupný žádný klient , TimeoutException
fondu bude vyhozen.
Klienti pouze pro čtení #
Ve výchozím nastavení řešení RedisClient pomocí GetRedisClient()
nebo GetRedisClientAsync()
vrátí klienta připojeného ke konfigurovanému primárnímu (master) hostiteli, pokud máte také nakonfigurované repliky (slave) hostitele, můžete k němu přistupovat pomocí GetReadOnlyClient()
nebo GetReadOnlyClientAsync()
API, např.:
using var redisReadOnly = clientsManager.GetReadOnlyClient();
BasicRedisClientManager #
Pokud nechcete používat sdružování připojení (tj. přistupujete k lokální instanci serveru redis-server), můžete použít základního (nesdruženého) Clients Manager, který vytvoří nový RedisClient
instance pokaždé:
container.Register<IRedisClientsManager>(c =>
new BasicRedisClientManager(redisConnectionString));
Přístup ke klientovi Redis #
Jakmile se zaregistrujete, přístup k RedisClient je stejný ve všech správcích klientů, např.:
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);
Podrobnější seznam dostupných rozhraní API RedisClient použitých v příkladu lze vidět v rozhraních C# níže:
- IRedisClientsManager
- IRedisClient
- IRedisNativeClient
- IRedisSubscription
Pipeline &Transaction API #
- IRedisTransaction
- IRedisPipelineShared
- IRedisQueueableOperation
- IRedisQueueCompletableOperation
Obecná klientská rozhraní API #
- IRedisTypedClient
- IRedisHash
- IRedisList
- IRedisSet
- IRedisSortedSet
- IRedisTypedQueueableOperation
Server Collection API #
- IRedisHash
- IRedisList
- IRedisSet
- IRedisSortedSet
Asynchronní Redis #
Asynchronní podpora v ServiceStack.Redis je navržena pro optimální efektivitu a využívá ValueTask
a další moderní asynchronní API dostupná pouze v .NET Standard 2.0 a .NET Framework v4.7.2+ projekty, kde existují ekvivalenty asynchronního API pro většinu synchronizačních rozhraní API, jak jsou obsaženy v níže uvedených rozhraních Async Redis:
- IRedisClientsManagerAsync
- IRedisClientAsync
- IRedisNativeClientAsync
- IRedisSubscriptionAsync
Async Pipeline &Transaction API #
- IRedisTransactionAsync
- IRedisPipelineSharedAsync
- IRedisQueueableOperationAsync
- IRedisQueueCompletableOperationAsync
Async Generic Client API #
- IRedisTypedClientAsync
- IRedisHashAsync
- IRedisListAsync
- IRedisSetAsync
- IRedisSortedSetAsync
- IRedisTypedTransactionAsync
- IRedisTypedQueueableOperationAsync
Async Server Collection API #
- IRedisHashAsync
- IRedisListAsync
- IRedisSetAsync
- IRedisSortedSetAsync