gpt4 book ai didi

c# - Servicestack RedisClient在处理后保持连接

转载 作者:太空宇宙 更新时间:2023-11-03 23:13:19 24 4
gpt4 key购买 nike

我在类里面为我的 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 数据库建立了另一个连接,但是这次连接保留在 CLIENT LIST 中。

最佳答案

请参阅ServiceStack.Redis documentation为了正确使用 ServiceStack Redis Client,即您应该将 Redis ClientManager 作为单例使用,最好是您在 IOC 中注册的单例,例如:

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

然后将它注入(inject)到你的类中,例如:

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()) { ... }

关于c# - Servicestack RedisClient在处理后保持连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38176280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com