Strings de conexão do Redis #
As strings de conexão do Redis foram expandidas para oferecer suporte ao formato URI mais versátil, que agora é capaz de capturar a maioria das configurações do Redis Client em uma única string de conexão (semelhante às strings de conexão do banco de dados).
As cadeias de conexão do Redis suportam vários formatos semelhantes a URI, a partir de um simples nome de host ou Endereço IP e porta par para um URI totalmente qualificado com várias opções especificadas no QueryString.
Alguns exemplos de formatos suportados:
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
INFORMAÇÕES
Mais exemplos podem ser vistos em ConfigTests.cs
Qualquer configuração adicional pode ser especificada como parâmetros QueryString. A lista completa de opções que podem ser especificadas inclui:
SSL | bool | Se esta for uma conexão SSL |
Db | int | O banco de dados Redis em que esta conexão deve ser definida |
Cliente | cadeia | Um alias de texto a ser especificado para esta conexão para fins analíticos |
Senha | cadeia | Versão UrlEncoded da senha para esta conexão |
ConnectTimeout | int | Tempo limite em ms para fazer uma conexão TCP Socket |
SendTimeout | int | Tempo limite em ms para fazer um envio de soquete TCP síncrono |
ReceiveTimeout | int | Tempo limite em ms para aguardar um recebimento de soquete TCP síncrono |
IdleTimeOutSecs | int | Tempo limite em segundos para que uma conexão ociosa seja considerada ativa |
NamespacePrefix | cadeia | Use um prefixo personalizado para coleções de índices internos do ServiceStack.Redis |
Suporte SSL ServiceStack.Redis #
ServiceStack.Redis suporta conexões SSL tornando-o adequado para acessar instâncias remotas do servidor Redis por meio de uma conexão SSL segura .
Especificar protocolo SSL #
O suporte para alterar os protocolos SSL usados para conexões SSL criptografadas pode ser definido na string de conexão usando os
sslprotocols
modificador, por exemplo:var connString = $"redis://{Host}?ssl=true&sslprotocols=Tls12&password={Password.UrlEncode()}";
var redisManager = new RedisManagerPool(connString);
using var client = redisManager.GetClient();
//...
Conectando-se ao Azure Redis #
Como a conexão com o Cache Redis do Azure via SSL era o principal caso de uso desse recurso, adicionamos um novo Conectando-se ao Redis do Azure via SSL para ajudá-lo a começar.
Redis GEO #
O lançamento do Redis 3.2.0 traz novos recursos GEO empolgantes que permitem armazenar coordenadas Lat/Long no Redis e consultar locais dentro de um raio especificado. Para demonstrar essa funcionalidade, criamos uma nova demonstração ao vivo do Redis GEO que permite clicar em qualquer lugar dos EUA para encontrar a lista das cidades mais próximas dentro de um determinado raio, demonstração ao vivo em:https://redis.netcore.io
Gerenciadores de clientes Redis #
A maneira recomendada de acessar
RedisClient
instâncias é usar um dos gerenciadores de clientes Thread-Safe disponíveis abaixo. Os gerenciadores de clientes são fábricas de conexão que devem ser registradas como Singleton em seu IOC ou classe estática. RedisManagerPool #
Com as strings de conexão de URI do Redis aprimoradas, conseguimos simplificar e otimizar o
PooledRedisClientManager
existente implementação e extraímos para um novo gerenciador de clientes chamado RedisManagerPool
. Além de remover todas as opções acima no próprio Client Manager, as strings de conexão somente leitura também foram removidas para que a configuração fique muito mais simples e alinhada com o caso de uso comum:
container.Register<IRedisClientsManager>(c =>
new RedisManagerPool(redisConnectionString));
Comportamento de agrupamento
Quaisquer conexões necessárias após o tamanho máximo do Pool ser atingido serão criadas e descartadas fora do Pool. Por não estar restrito a um tamanho máximo de pool, o comportamento de pool em
RedisManagerPool
pode manter um tamanho de pool de conexões menor ao custo de potencialmente ter uma contagem maior de conexões abertas/fechadas. PooledRedisClientManager #
Se você preferir definir opções no próprio Client Manager ou quiser fornecer servidores redis de leitura/gravação e somente leitura (ou seja, mestre e réplica) separados, use o
PooledRedisClientManager
em vez de:container.Register<IRedisClientsManager>(c =>
new PooledRedisClientManager(redisReadWriteHosts, redisReadOnlyHosts) {
ConnectTimeout = 100,
//...
});
Comportamento de agrupamento
O
PooledRedisClientManager
impõe um limite máximo de conexão e, quando o tamanho máximo do pool for atingido, bloqueará qualquer nova solicitação de conexão até o próximo RedisClient
é lançado de volta na piscina. Se nenhum cliente estiver disponível em PoolTimeout
, um pool TimeoutException
será lançado. Clientes somente leitura #
Por padrão, resolvendo um RedisClient com
GetRedisClient()
ou GetRedisClientAsync()
retornará um cliente conectado ao host primário (mestre) configurado, se você também tiver hosts de réplica (escravos) configurados, poderá acessá-lo com o GetReadOnlyClient()
ou GetReadOnlyClientAsync()
APIs, por exemplo:using var redisReadOnly = clientsManager.GetReadOnlyClient();
BasicRedisClientManager #
Se não quiser usar o pool de conexões (ou seja, você está acessando uma instância do servidor redis local), você pode usar um Clients Manager básico (não agrupado) que cria um novo
RedisClient
instância de cada vez:container.Register<IRedisClientsManager>(c =>
new BasicRedisClientManager(redisConnectionString));
Acessando o cliente Redis #
Uma vez cadastrado, o acesso ao RedisClient é o mesmo em todos os Client Managers, por exemplo:
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);
Uma lista mais detalhada das APIs RedisClient disponíveis usadas no exemplo pode ser vista nas interfaces C# abaixo:
- IRedisClientsManager
- IRedisClient
- IRedisNativeClient
- IRedisSubscription
APIs de pipeline e transação #
- IRedisTransaction
- IRedisPipelineShared
- IRedisQueueableOperation
- IRedisQueueCompletableOperation
APIs de cliente genéricas #
- IRedisTypedClient
- IRedisHash
- IRedisList
- IRedisSet
- IRedisSortedSet
- IRedisTypedQueueableOperation
APIs de coleção de servidores #
- IRedisHash
- IRedisList
- IRedisSet
- IRedisSortedSet
Redis assíncrono #
O suporte assíncrono no ServiceStack.Redis foi projetado para otimizar a eficiência e usa
ValueTask
e outras APIs assíncronas modernas disponíveis apenas no .NET Standard 2.0 e .NET Framework v4.7.2+ projetos em que há equivalentes de API assíncrona para a maioria das APIs de sincronização contidas nas interfaces Async Redis abaixo:- IRedisClientsManagerAsync
- IRedisClientAsync
- IRedisNativeClientAsync
- IRedisSubscriptionAsync
APIs de pipeline e transação assíncronas #
- IRedisTransactionAsync
- IRedisPipelineSharedAsync
- IRedisQueueableOperationAsync
- IRedisQueueCompletableOperationAsync
APIs de cliente genérico assíncrono #
- IRedisTypedClientAsync
- IRedisHashAsync
- IRedisListAsync
- IRedisSetAsync
- IRedisSortedSetAsync
- IRedisTypedTransactionAsync
- IRedisTypedQueueableOperationAsync
APIs de coleção de servidor assíncrono #
- IRedisHashAsync
- IRedisListAsync
- IRedisSetAsync
- IRedisSortedSetAsync