Redis
 sql >> Base de données >  >> NoSQL >> Redis

Gestion des connexions

Chaînes de connexion Redis #

Les chaînes de connexion Redis ont été étendues pour prendre en charge le format URI plus polyvalent qui est désormais capable de capturer la plupart des paramètres du client Redis dans une seule chaîne de connexion (semblable aux chaînes de connexion DB).

Les chaînes de connexion Redis prennent en charge plusieurs formats de type URI, à partir d'un simple nom d'hôte ou Adresse IP et port associer à un URI pleinement qualifié avec plusieurs options spécifiées sur la QueryString.

Quelques exemples de formats pris en charge :

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

INFORMATIONS

Plus d'exemples peuvent être vus dans ConfigTests.cs

Toute configuration supplémentaire peut être spécifiée en tant que paramètres QueryString. La liste complète des options pouvant être spécifiées inclut :

SSL bool S'il s'agit d'une connexion SSL
Db entier La base de données Redis sur laquelle cette connexion doit être définie
Client chaîne Un alias de texte à spécifier pour cette connexion à des fins d'analyse
Mot de passe chaîne Version UrlEncodée du mot de passe pour cette connexion
ConnectTimeout entier Délai d'attente en ms pour établir une connexion TCP Socket
SendTimeout entier Délai d'attente en ms pour effectuer un envoi de socket TCP synchrone
ReceiveTimeout entier Délai d'attente en ms pour attendre une réception de socket TCP synchrone
IdleTimeOutSecs entier Délai d'attente en secondes pour qu'une connexion inactive soit considérée comme active
Préfixe d'espace de noms chaîne Utiliser un préfixe personnalisé pour les collections d'index internes ServiceStack.Redis

Numéro d'assistance SSL ServiceStack.Redis

ServiceStack.Redis prend en charge les connexions SSL ce qui le rend approprié pour accéder à des instances de serveur Redis distantes via une connexion SSL sécurisée .

Spécifier le numéro de protocole SSL

La prise en charge de la modification des protocoles SSL utilisés pour les connexions SSL cryptées peut être définie sur la chaîne de connexion à l'aide des sslprotocols modificateur, par exemple :

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

Connexion à Azure Redis #

Étant donné que la connexion à Azure Redis Cache via SSL était le principal cas d'utilisation de cette fonctionnalité, nous avons ajouté une nouvelle connexion à Azure Redis via SSL pour vous aider à démarrer.

Redis GEO #

La sortie de Redis 3.2.0 lui apporte de nouvelles fonctionnalités GEO intéressantes qui vous permettront de stocker les coordonnées Lat/Long dans Redis et d'interroger des emplacements dans un rayon spécifié. Pour démontrer cette fonctionnalité, nous avons créé une nouvelle démo Redis GEO Live qui vous permet de cliquer n'importe où aux États-Unis pour trouver la liste des villes les plus proches dans un rayon donné, Live Demo à :https://redis.netcore.io

Redis Client Managers #

La méthode recommandée pour accéder à RedisClient instances consiste à utiliser l'un des gestionnaires de clients Thread-Safe disponibles ci-dessous. Les gestionnaires de clients sont des fabriques de connexions qui doivent être enregistrées en tant que singleton dans votre classe IOC ou statique.

RedisManagerPool #

Grâce aux chaînes de connexion URI Redis améliorées, nous avons pu simplifier et rationaliser le PooledRedisClientManager existant implémentation et l'ont extrait dans un nouveau gestionnaire de clients appelé RedisManagerPool .

En plus de supprimer toutes les options ci-dessus sur le gestionnaire de clients lui-même, les chaînes de connexion en lecture seule ont également été supprimées afin que la configuration soit beaucoup plus simple et plus alignée sur le cas d'utilisation courant :

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

Comportement de regroupement

Toutes les connexions requises après que la taille maximale du pool a été atteinte seront créées et supprimées en dehors du pool. En n'étant pas limité à une taille de pool maximale, le comportement de pooling dans RedisManagerPool peut maintenir une taille de pool de connexions plus petite au prix d'un nombre de connexions ouvertes/fermées potentiellement plus élevé.

PooledRedisClientManager #

Si vous préférez définir des options sur le gestionnaire de clients lui-même ou si vous souhaitez fournir des serveurs redis séparés en lecture/écriture et en lecture seule (c'est-à-dire maître et réplique), utilisez le PooledRedisClientManager à la place :

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

Comportement de regroupement

Le PooledRedisClientManager impose une limite de connexion maximale et lorsque sa taille maximale de pool a été atteinte, bloquera à la place toute nouvelle demande de connexion jusqu'au prochain RedisClient est relâché dans la piscine. Si aucun client n'est devenu disponible dans PoolTimeout , un pool TimeoutException sera lancé.

Clients en lecture seule #

Par défaut résoudre un RedisClient avec GetRedisClient() ou GetRedisClientAsync() renverra un client connecté à l'hôte principal (maître) configuré, si vous avez également configuré des hôtes répliques (esclaves), vous pouvez y accéder avec le GetReadOnlyClient() ou GetReadOnlyClientAsync() API, par exemple :

using var redisReadOnly = clientsManager.GetReadOnlyClient();

BasicRedisClientManager #

Si vous ne souhaitez pas utiliser le regroupement de connexions (c'est-à-dire que vous accédez à une instance redis-server locale), vous pouvez utiliser un gestionnaire de clients de base (non groupé) qui crée un nouveau RedisClient instance à chaque fois :

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

Accéder au client Redis #

Une fois enregistré, l'accès au RedisClient est le même dans tous les Client Managers, par exemple :

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

Une liste plus détaillée des API RedisClient disponibles utilisées dans l'exemple peut être consultée dans les interfaces C# ci-dessous :

  • IRedisClientsManager
  • IRedisClient
  • IRedisNativeClient
  • Abonnement IRedis

API de pipeline et de transaction #

  • IRedisTransaction
  • IRedisPipelineShared
  • IRedisQueueableOperation
  • IRedisQueueCompletableOperation

API client générique #

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

API de collection de serveurs #

  • IRedisHash
  • IRedisList
  • IRedisSet
  • IRedisSortedSet

# Redis asynchrone

La prise en charge asynchrone dans ServiceStack.Redis est conçue pour une efficacité optimale et utilise ValueTask &autres API Async modernes uniquement disponibles dans .NET Standard 2.0 et .NET Framework v4.7.2+ projets où il existe des équivalents d'API asynchrones pour la plupart des API de synchronisation, comme indiqué dans les interfaces Redis asynchrones ci-dessous :

  • IRedisClientsManagerAsync
  • IRedisClientAsync
  • IRedisNativeClientAsync
  • IRedisSubscriptionAsync

API de pipeline et de transaction asynchrones #

  • IRedisTransactionAsync
  • IRedisPipelineSharedAsync
  • IRedisQueueableOperationAsync
  • IRedisQueueCompletableOperationAsync

API client générique asynchrone #

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

API de collecte de serveurs asynchrones #

  • IRedisHashAsync
  • IRedisListAsync
  • IRedisSetAsync
  • IRedisSortedSetAsync