Servicestack RedisClient在处理后保持连接
Servicestack RedisClient staying connected after being disposed
我在 class 中为我的 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
之后,如果我使用相同的处理 client
向 redis 发出另一个请求,处理后的客户端成功地与 redis 数据库建立了另一个连接,但是这次连接停留在客户名单。
请参阅 ServiceStack.Redis documentation 以了解使用 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");
}
但重要的是从 IRedisClientsManager
解析一个 redis 客户端,然后在立即使用后处理它,例如在 using 语句中:
using (var redis = RedisManager.GetClient()) { ... }
我在 class 中为我的 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
之后,如果我使用相同的处理 client
向 redis 发出另一个请求,处理后的客户端成功地与 redis 数据库建立了另一个连接,但是这次连接停留在客户名单。
请参阅 ServiceStack.Redis documentation 以了解使用 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");
}
但重要的是从 IRedisClientsManager
解析一个 redis 客户端,然后在立即使用后处理它,例如在 using 语句中:
using (var redis = RedisManager.GetClient()) { ... }