Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Gerenciando conexões

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