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