sql >> Databáze >  >> NoSQL >> Redis

Správa připojení

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

  1. MongoDB $anyElementTrue

  2. Importujete soubor JSON pomocí mongimportu, stále dostáváte „neočekávaný identifikátor“?

  3. 7 způsobů, jak počítat dokumenty v MongoDB

  4. jackson deserializovat objekt se seznamem rozhraní pružiny