Na verdade, quando você usa
PersonClient.Lists["urn:names:current"]
você está realmente armazenando uma referência a uma conexão RedisClient que não é thread-safe. Tudo bem se estiver em um aplicativo de GUI ou console, mas não é o ideal em um aplicativo da web multithread. Na maioria dos cenários, você deseja usar uma fábrica de conexão segura de thread, ou seja, var redisManager = new PooledRedisClientManager("localhost:6379");
Que funciona muito como um pool de conexão de banco de dados. Então sempre que você quiser acessar o RedisClient funciona assim:
using (var redis = redisManager.GetClient())
{
var allItems = redis.As<Person>().Lists["urn:names:current"].GetAll();
}
Observação:
.As<T>
é um alias mais curto para .GetTypedClient<T>
Outro atalho conveniente para executar um cliente tipado de um redisManager é:var allItems = redisManager.ExecAs<Person>(r => r.Lists["urn:names:current"].GetAll());
Eu geralmente prefiro passar
IRedisClientsManager
no meu código para que ele não mantenha uma conexão RedisClient, mas possa acessá-lo sempre que precisar.