Tatsächlich, wenn Sie PersonClient.Lists["urn:names:current"]
verwenden Sie speichern tatsächlich einen Verweis auf eine RedisClient-Verbindung, die nicht threadsicher ist. Es ist in Ordnung, wenn es sich um eine GUI- oder Konsolen-App handelt, aber nicht ideal in einer Multithread-Web-App. In den meisten Szenarien möchten Sie eine Thread-sichere Verbindungsfactory verwenden, z. B.
var redisManager = new PooledRedisClientManager("localhost:6379");
Das wirkt sehr ähnlich wie ein Datenbankverbindungspool. Wann immer Sie also auf den RedisClient zugreifen möchten, funktioniert das wie folgt:
using (var redis = redisManager.GetClient())
{
var allItems = redis.As<Person>().Lists["urn:names:current"].GetAll();
}
Hinweis:.As<T>
ist ein kürzerer Alias für .GetTypedClient<T>
Eine weitere bequeme Abkürzung zum Ausführen eines typisierten Clients aus einem redisManager ist:
var allItems = redisManager.ExecAs<Person>(r => r.Lists["urn:names:current"].GetAll());
Normalerweise ziehe ich es vor, IRedisClientsManager
herumzureichen in meinem Code, damit es keine RedisClient-Verbindung hält, aber jederzeit darauf zugreifen kann.