我正在为班级中的redisclient使用servicestack。我有一个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
如果我使用相同的处置请求另一个Redis请求client
,处置的客户端成功建立了另一个与Redis数据库的连接,但是这次连接保留在CLIENT LIST中。
请参阅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 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");
}
但是重要的是要从a解析一个redis客户端IRedisClientsManager
,然后在立即使用后将其处置,例如在using语句中:
using (var redis = RedisManager.GetClient()) { ... }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句