Redis
 sql >> база данни >  >> NoSQL >> Redis

Управление на връзки

Редис низове за връзка #

Низовете за връзка на Redis бяха разширени, за да поддържат по-гъвкавия URI формат, който вече може да улови повечето настройки на Redis Client в един низ за връзка (подобен на низовете за връзка с DB).

Redis Connection Strings поддържа множество формати, подобни на URI, от просто име на хост или IP адрес и порт сдвоете с напълно квалифициран URI с множество опции, посочени в QueryString.

Някои примери за поддържани формати:

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

ИНФОРМАЦИЯ

Още примери можете да видите в ConfigTests.cs

Всяка допълнителна конфигурация може да бъде зададена като параметри на QueryString. Пълният списък с опции, които могат да бъдат посочени, включва:

Ssl bool Ако това е SSL връзка
Db int В Redis DB тази връзка трябва да бъде настроена на
Клиент низ Текстов псевдоним, който да посочите за тази връзка за аналитични цели
Парола низ UrlEncoded версия на паролата за тази връзка
ConnectTimeout int Време изчакване в ms за осъществяване на TCP сокет връзка
SendTimeout int Време изчакване в мс за извършване на синхронно изпращане на TCP сокет
ReceiveTimeout int Време изчакване в мс за изчакване на синхронно получаване на TCP сокет
IdleTimeOutSecs int Време изчакване в секунди, за да се счита за активна неактивна връзка
Префикс на пространството на имена низ Използвайте персонализиран префикс за колекции от вътрешни индекси ServiceStack.Redis

ServiceStack.Redis SSL поддръжка #

ServiceStack.Redis поддържа SSL връзки което го прави подходящ за достъп до отдалечени копия на Redis сървър през сигурна SSL връзка .

Посочете SSL протокол #

Поддръжка за промяна на Ssl протоколите, използвани за криптирани SSL връзки, може да бъде зададена на низа за връзка с помощта на sslprotocols модификатор, напр.:

var connString = $"redis://{Host}?ssl=true&sslprotocols=Tls12&password={Password.UrlEncode()}";
var redisManager = new RedisManagerPool(connString);
using var client = redisManager.GetClient();
//...

Свързване с Azure Redis #

Тъй като свързването с Azure Redis Cache чрез SSL беше основният случай на използване на тази функция, добавихме нов Свързване с Azure Redis чрез SSL, за да ви помогнем да започнете.

Redis GEO #

Излизането на Redis 3.2.0 му носи вълнуващи нови възможности за GEO, които ще ви позволят да съхранявате координати на Lat/Long в Redis и да правите заявки в рамките на определен радиус. За да демонстрираме тази функционалност, създадохме нова Redis GEO Live Demo, която ви позволява да щракнете върху навсякъде в САЩ, за да намерите списъка с най-близките градове в даден радиус, Live Demo на:https://redis.netcore.io

Redis Client Managers #

Препоръчителният начин за достъп до RedisClient екземпляри е да използвате един от наличните нишки-безопасни клиентски мениджъри по-долу. Мениджърите на клиенти са фабрики за свързване, които трябва да бъдат регистрирани като Singleton във вашия IOC или статичен клас.

RedisManagerPool #

С подобрените низове за връзка на Redis URI успяхме да опростим и рационализираме съществуващия PooledRedisClientManager реализация и са го извадили в нов мениджър на клиенти, наречен RedisManagerPool .

В допълнение към премахването на всички по-горе опции в самия Client Manager, низовете за свързване само за четене също бяха премахнати, така че конфигурацията в крайна сметка е много по-проста и по-съгласувана с общия случай на употреба:

container.Register<IRedisClientsManager>(c => 
    new RedisManagerPool(redisConnectionString));

Поведение на обединение

Всички връзки, необходими след достигане на максималния размер на пула, ще бъдат създадени и изхвърлени извън пула. Като не е ограничен до максимален размер на пула, поведението на обединяването в RedisManagerPool може да поддържа по-малък размер на пула за връзки с цената на потенциално по-голям брой отворени/затворени връзки.

PooledRedisClientManager #

Ако предпочитате да дефинирате опции в самия клиентски мениджър или искате да предоставите отделни Redis сървъри за четене/запис и само за четене (т.е. главен и реплика), използвайте PooledRedisClientManager вместо това:

container.Register<IRedisClientsManager>(c => 
    new PooledRedisClientManager(redisReadWriteHosts, redisReadOnlyHosts) { 
        ConnectTimeout = 100,
        //...
    });

Поведение на обединение

PooledRedisClientManager налага максимално ограничение на връзката и когато максималният му размер на пула бъде достигнат, вместо това ще блокира всички нови заявки за връзка до следващия RedisClient се пуска обратно в басейна. Ако нито един клиент не стане наличен в рамките на PoolTimeout , пул TimeoutException ще бъде хвърлен.

Клиенти само за четене #

По подразбиране разрешаване на RedisClient с GetRedisClient() или GetRedisClientAsync() ще върне клиент, свързан към конфигурирания първичен (главен) хост, ако имате конфигурирани и реплики (подчинени) хостове, можете да получите достъп до него с GetReadOnlyClient() или GetReadOnlyClientAsync() API, напр.:

using var redisReadOnly = clientsManager.GetReadOnlyClient();

BasicRedisClientManager #

Ако не искате да използвате обединяване на връзки (т.е. имате достъп до локален екземпляр на redis-сървър), можете да използвате основен (необединен) мениджър на клиенти, който създава нов RedisClient екземпляр всеки път:

container.Register<IRedisClientsManager>(c => 
    new BasicRedisClientManager(redisConnectionString));

Достъп до Redis Client #

Веднъж регистриран, достъпът до RedisClient е еднакъв във всички клиентски мениджъри, напр.:

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);

По-подробен списък с наличните RedisClient API, използвани в примера, може да се види в C# интерфейсите по-долу:

  • IRedisClientsManager
  • IRedisClient
  • IRedisNativeClient
  • IRedisSubscription

API за канали и транзакции #

  • IRedisTransaction
  • IRedisPipelineShared
  • IRedisQueueableOperation
  • IRedisQueueCompletableOperation

Общи клиентски API #

  • IRedisTypedClient
  • IRedisHash
  • IRedisList
  • IRedisSet
  • IRedisSortedSet
  • IRedisTypedQueueableOperation

API за събиране на сървъри #

  • IRedisHash
  • IRedisList
  • IRedisSet
  • IRedisSortedSet

Async Redis #

Асинхронната поддръжка в ServiceStack.Redis е проектирана за оптимална ефективност и използва ValueTask и други съвременни асинхронни приложни програмни интерфейси (API), налични само в .NET Standard 2.0 и .NET Framework v4.7.2+ проекти, в които има еквиваленти на асинхронен API за повечето API за синхронизиране, както се съдържа в интерфейсите на Async Redis по-долу:

  • IRedisClientsManagerAsync
  • IRedisClientAsync
  • IRedisNativeClientAsync
  • IRedisSubscriptionAsync

Async Pipeline &Transaction APIs #

  • IRedisTransactionAsync
  • IRedisPipelineSharedAsync
  • IRedisQueueableOperationAsync
  • IRedisQueueCompletableOperationAsync

Асинхронни общи клиентски API #

  • IRedisTypedClientAsync
  • IRedisHashAsync
  • IRedisListAsync
  • IRedisSetAsync
  • IRedisSortedSetAsync
  • IRedisTypedTransactionAsync
  • IRedisTypedQueueableOperationAsync

Async Server Collection APIs #

  • IRedisHashAsync
  • IRedisListAsync
  • IRedisSetAsync
  • IRedisSortedSetAsync

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да конфигурирам redis-cluster, когато използвате spring-data-redis 1.7.0.M1

  2. Redis не може да се свърже при натоварено натоварване

  3. Как да създадете модел в DRY модел с помощта на flow.js (за асинхронни повиквания) в node.js?

  4. Как работи SignalR.Redis под капака?

  5. Да използвате множество DB с един Redis Lua скрипт?