我在班上使用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数据库,但这次连接仍保留在客户端列表中
答案 0 :(得分:3)
请参阅ServiceStack.Redis documentation了解使用ServiceStack Redis客户端的正确用法,即您应该使用Redis ClientManager作为单例,最好是在IOC中注册的单例,例如:
container.Register<IRedisClientsManager>(c =>
new RedisManagerPool("localhost:6379"));
然后在你的课程中注入,例如:
public class MySuperClass
{
public IRedisClientsManager RedisManager { get; set; }
}
然后,您可以在使用中解析Redis ClientManger中的客户端,例如:
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 (var redis = RedisManager.GetClient()) { ... }