Редис низове за връзка #
Низовете за връзка на 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