Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Ist dies eine gültige Nutzung von ServiceStack Redis?

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.