sql >> Base de Datos >  >> NoSQL >> Redis

Administrar conexiones

Cadenas de conexión Redis #

Las cadenas de conexión de Redis se han ampliado para admitir el formato de URI más versátil que ahora puede capturar la mayoría de las configuraciones del cliente de Redis en una sola cadena de conexión (similar a las cadenas de conexión de base de datos).

Redis Connection Strings admite múltiples formatos similares a URI, desde un simple nombre de host o Dirección IP y puerto empareje con un URI completamente calificado con múltiples opciones especificadas en QueryString.

Algunos ejemplos de formatos admitidos:

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

INFORMACIÓN

Se pueden ver más ejemplos en ConfigTests.cs

Cualquier configuración adicional se puede especificar como parámetros QueryString. La lista completa de opciones que se pueden especificar incluye:

SSL bool Si se trata de una conexión SSL
Db int La base de datos de Redis en la que se debe configurar esta conexión
Cliente cadena Un alias de texto para especificar esta conexión con fines analíticos
Contraseña cadena Versión codificada en URL de la contraseña para esta conexión
Tiempo de espera de conexión int Tiempo de espera en ms para realizar una conexión TCP Socket
Tiempo de espera de envío int Tiempo de espera en ms para realizar un envío de socket TCP síncrono
Tiempo de espera de recepción int Tiempo de espera en ms para esperar una recepción de socket TCP síncrona
Segs de tiempo de inactividad int Tiempo de espera en segundos para que una conexión inactiva se considere activa
Prefijo de espacio de nombres cadena Usar un prefijo personalizado para las colecciones de índices internos de ServiceStack.Redis

ServiceStack.Redis Soporte SSL #

ServiceStack.Redis admite conexiones SSL haciéndolo adecuado para acceder a instancias remotas del servidor Redis a través de una conexión SSL segura .

Especifique el protocolo SSL n.°

El soporte para cambiar los protocolos Ssl utilizados para las conexiones SSL encriptadas se puede configurar en la cadena de conexión usando sslprotocols modificador, por ejemplo:

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

Conectando a Azure Redis #

Como la conexión a Azure Redis Cache a través de SSL era el caso de uso principal de esta función, hemos agregado una nueva Conexión a Azure Redis a través de SSL para ayudarlo a comenzar.

GEO de Redis n.°

El lanzamiento de Redis 3.2.0 trae nuevas y emocionantes capacidades GEO que le permitirán almacenar coordenadas de latitud y longitud en Redis y consultar ubicaciones dentro de un radio específico. Para demostrar esta funcionalidad, hemos creado una nueva demostración en vivo de Redis GEO que le permite hacer clic en cualquier lugar de los EE. UU. para encontrar la lista de ciudades más cercanas dentro de un radio determinado, demostración en vivo en:https://redis.netcore.io

Administradores de clientes de Redis #

La forma recomendada de acceder a RedisClient instancias es usar uno de los Administradores de clientes seguros para subprocesos disponibles a continuación. Los administradores de clientes son fábricas de conexiones que deben registrarse como Singleton en su IOC o clase estática.

RedisManagerPool #

Con las cadenas de conexión Redis URI mejoradas, hemos podido simplificar y optimizar el PooledRedisClientManager existente. implementación y la he extraído a un nuevo administrador de clientes llamado RedisManagerPool .

Además de eliminar todas las opciones anteriores en el Administrador de clientes, también se eliminaron las cadenas de conexión de solo lectura, por lo que la configuración termina siendo mucho más simple y más alineada con el caso de uso común:

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

Comportamiento de agrupación

Cualquier conexión requerida después de que se haya alcanzado el tamaño máximo del grupo se creará y eliminará fuera del grupo. Al no estar restringido a un tamaño de grupo máximo, el comportamiento de agrupación en RedisManagerPool puede mantener un tamaño de grupo de conexiones más pequeño a costa de tener potencialmente un mayor número de conexiones abiertas/cerradas.

PooledRedisClientManager #

Si prefiere definir opciones en el Administrador de clientes o si desea proporcionar servidores de redis independientes de lectura/escritura y de solo lectura (es decir, maestro y réplica), utilice el PooledRedisClientManager en cambio:

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

Comportamiento de agrupación

El PooledRedisClientManager impone un límite máximo de conexión y, cuando se alcanza el tamaño máximo de grupo, bloqueará cualquier nueva solicitud de conexión hasta el próximo RedisClient se libera de nuevo en la piscina. Si ningún cliente estuvo disponible dentro de PoolTimeout , un grupo TimeoutException será arrojado.

Clientes de solo lectura #

Por defecto, resolver un RedisClient con GetRedisClient() o GetRedisClientAsync() devolverá un cliente conectado al host primario (maestro) configurado, si también tiene configurados hosts de réplica (esclavo), puede acceder a él con GetReadOnlyClient() o GetReadOnlyClientAsync() API, por ejemplo:

using var redisReadOnly = clientsManager.GetReadOnlyClient();

BasicRedisClientManager #

Si no desea utilizar la agrupación de conexiones (es decir, está accediendo a una instancia de servidor redis local), puede utilizar un Administrador de clientes básico (no agrupado) que crea un nuevo RedisClient instancia cada vez:

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

Accediendo al Cliente Redis #

Una vez registrado, el acceso a RedisClient es el mismo en todos los Administradores de Clientes, por ejemplo:

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

Se puede ver una lista más detallada de las API de RedisClient disponibles utilizadas en el ejemplo en las interfaces de C# a continuación:

  • Administrador de clientes de IRedis
  • IRedisClient
  • IRedisNativeClient
  • Suscripción a IRedis

Pipeline &Transaction APIs #

  • Transacción de IRedis
  • IRedisPipelineShared
  • OperaciónIRedisQueueable
  • IRedisQueueCompletableOperation

API de cliente genérico n.º

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

API de recopilación de servidores #

  • IRedisHash
  • IRedisList
  • IRedisSet
  • IRedisSortedSet

Async Redis #

El soporte asíncrono en ServiceStack.Redis está diseñado para una eficiencia óptima y utiliza ValueTask y otras API asíncronas modernas solo disponibles en .NET Standard 2.0 y .NET Framework v4.7.2+ proyectos en los que hay equivalentes de API asíncrona para la mayoría de las API de sincronización, tal como se incluye en las siguientes interfaces de Redis asíncronas:

  • IRedisClientsManagerAsync
  • IRedisClientAsync
  • IRedisNativeClientAsync
  • IRedisSubscriptionAsync

API de canalización y transacciones asíncronas #

  • IRedisTransactionAsync
  • IRedisPipelineSharedAsync
  • IRedisQueueableOperationAsync
  • IRedisQueueCompletableOperationAsync

API de cliente genérico asíncrono #

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

API de recopilación de servidores asíncronos #

  • IRedisHashAsync
  • IRedisListAsync
  • IRedisSetAsync
  • IRedisSortedSetAsync