Servicestack RedisClient在被处理后保持连接

本文关键字:连接 处理 RedisClient Servicestack | 更新日期: 2023-09-27 17:54:53

我在班上使用servicestack作为我的redisclient。我有一个redis客户端如下:

public class MySuperClass{
    ....        
    RedisClient client = new RedisClient("localhost", 6379);    
    public int MySuperProperty{get; set:}
    ....
}

下面是我如何使用它来确保它在我使用后被正确处理:

private void GetInfoFromRedis(object sender, EventArgs e) {
    using (client) {
        client.Set<Human>("RedisKey", new Human { 
            Age = 29,
            Height = 170,
            Name = "HumanName"
            });
        }
    }

我的问题是在我处置client之后,如果我使用相同的处置client向redis发出另一个请求,处置的客户端成功地再次连接到redis数据库,但这次连接留在client LIST中。

Servicestack RedisClient在被处理后保持连接

请参阅ServiceStack。Redis文档中正确使用ServiceStack Redis Client,也就是说,你应该使用一个Redis ClientManager作为一个单例,最好是一个你注册在IOC,例如:

container.Register<IRedisClientsManager>(c => 
    new RedisManagerPool("localhost:6379"));

然后把它注入到你的类中,例如:

public class MySuperClass
{
    public IRedisClientsManager RedisManager { get; set; }
}

你可以从Redis clientmanager中解析一个客户端,例如:

private void GetInfoFromRedis(object sender, EventArgs e) 
{
    using (var client = RedisManager.GetClient()) 
    {
        client.Set<Human>("RedisKey", new Human { 
            Age = 29,
            Height = 170,
            Name = "HumanName"
            });
        }
    }
}

如果你不使用IOC,你可以在静态属性中填充IRedisClientsManager,例如:

public class MySuperClass
{
    public static IRedisClientsManager RedisManager = 
        new RedisManagerPool("localhost:6379");
}

但重要的是要从IRedisClientsManager解决一个redis客户端,然后在立即使用后处理它,例如在using语句中:

using (var redis = RedisManager.GetClient()) { ... }