Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Este é um uso válido do ServiceStack Redis?


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.