En fait, lorsque vous utilisez PersonClient.Lists["urn:names:current"]
vous stockez en fait une référence à une connexion RedisClient qui n'est pas thread-safe. C'est correct si c'est dans une application graphique ou console, mais pas idéal dans une application Web multithread. Dans la plupart des scénarios, vous souhaitez utiliser une fabrique de connexions sécurisées pour les threads, c'est-à-dire
var redisManager = new PooledRedisClientManager("localhost:6379");
Qui agit comme un pool de connexion à une base de données. Ainsi, chaque fois que vous souhaitez accéder au RedisClient, cela fonctionne comme :
using (var redis = redisManager.GetClient())
{
var allItems = redis.As<Person>().Lists["urn:names:current"].GetAll();
}
Remarque :.As<T>
est un alias plus court pour .GetTypedClient<T>
Un autre raccourci pratique pour exécuter un client typé à partir d'un redisManager est :
var allItems = redisManager.ExecAs<Person>(r => r.Lists["urn:names:current"].GetAll());
Je préfère généralement passer autour de IRedisClientsManager
dans mon code afin qu'il ne contienne pas de connexion RedisClient mais qu'il puisse y accéder quand il en a besoin.