我正在使用ServiceStack IRedis客户端,如下所示
public static IRedisList<MyType> getList(string listkey)
{
using(var redis = new RedisClient())
{
var client = redis.As<MyType>();
return client.Lists[listkey];
}
}
public void AddSomething(MyType newType)
{
var list = getList("somekey);
list.Add(newType);.
}
根据Redis-Server输出,每次我这样做时都会添加一个新的客户端连接,并且它永远不会被处理掉。 (客户数量一直在增加)。
我不应该这样操纵IRedisList
吗?
答案 0 :(得分:2)
IRedisList
就像是redis服务器端列表的代理包装器,其中包含对创建的 RedisClient 的引用,以便与Redis对话。
using(var redis = new RedisClient()) { ... }
语句确实处理了客户端连接,遗憾的是当您使用Disposed客户端进行任何进一步调用时,它会再次重新打开连接,因为它不在using语句中或者没有手动处理保持连接畅通。
为了防止这种情况发生,您不应该在创建它的RedisClient的使用范围之外访问RedisList代理。如果您仍想引用此范围之外的列表,则应将内容克隆到具有以下内容的内存列表中:
var disconnectedInMemoryCopy = client.Lists[listKey].ToList();
这将返回从RedisList代理解除耦合的填充正常C#List<T>
。