In realtà quando usi PersonClient.Lists["urn:names:current"]
stai effettivamente memorizzando un riferimento a una connessione RedisClient che non è thread-safe. Va bene se si trova in un'app GUI o Console, ma non è l'ideale in un'app Web multi-thread. Nella maggior parte degli scenari si desidera utilizzare una factory di connessione thread-safe, ad esempio
var redisManager = new PooledRedisClientManager("localhost:6379");
Che agisce in modo molto simile a un pool di connessioni al database. Quindi ogni volta che vuoi accedere al RedisClient funziona come:
using (var redis = redisManager.GetClient())
{
var allItems = redis.As<Person>().Lists["urn:names:current"].GetAll();
}
Nota:.As<T>
è un alias più breve per .GetTypedClient<T>
Un'altra comoda scorciatoia per eseguire un client digitato da un redisManager è:
var allItems = redisManager.ExecAs<Person>(r => r.Lists["urn:names:current"].GetAll());
Di solito preferisco passare da IRedisClientsManager
nel mio codice in modo che non contenga una connessione RedisClient ma possa accedervi ogni volta che è necessario.