PooledRedisClientManager不释放连接

我在Redis中存储json数据列表,并使用ServiceStack

c#客户端访问它。我本质上是在管理自己的外键,在其中存储zrangeid,然后使用应用程序内部的接口从中提取ID

zrange,然后从Redis获取基础json对象并将其打包为列表以返回其他部分我的申请。

我正在使用,PooledRedisClientManager因为我希望Redis可以托管在与执行代码的服务器不同的服务器上。

我正在使用MSOpenTech Redis服务器在Windows 8上本地进行所有开发工作。当前,我最大的挑战是客户端连接没有关闭。

我的Redis持久性被注入了一个实例IRedisClientManager(IoC是CastleWindsor)。此代码在Azure角色角色的上下文中执行。

这就是我从zrange获取项目的方式:

public class MyRedisPersister<T> : IResourcePersister<T>

{

IRedisClientManager _mgr;

public MyRedisPersister(IRedisClientManager mgr)

{

_mgr = mgr;

}

public IResourceList<T> Get<T>(string key, int offset, int count) where T

{

using (var redis = _clientManager.GetClient())

{

var itemKeys = redis.GetRangeFromSortedSet(key, offset, offset + count - 1).ToList();

var totalItems = redis.GetSortedSetCount(key);

if (itemKeys.Count == 0)

{

return new ResourceList<T>

{

Items = new List<T>(),

Offset = 0,

PageSize = 0,

TotalItems = 0,

TotalPages = 0

};

}

else

{

return new ResourceList<T>

{

Items = itemKeys.Select(k => redis.Get<T>(k)).ToList(),

Offset = offset,

PageSize = count,

TotalItems = totalItems,

TotalPages = (int) Math.Ceiling((float) totalItems/count)

};

}

}

}

}

这是我用来注册 IRedisClientManager

var mgr = new PooledRedisClientManager(100, 10, "localhost:6379");

container.Register(Component.For<IRedisClientsManager>().Instance(mgr).LifeStyle.Singleton);

任何帮助将不胜感激。

回答:

您正在使用“

PooledRedisClientManager”,因此我的理解是不应关闭客户端连接,而应将其放在池中以供重用。看起来您的池大小为100个连接。

您可以尝试使用 var mgr = new BasicRedisClientManager("localhost:6379") 应该处理客户端的方法。

以上是 PooledRedisClientManager不释放连接 的全部内容, 来源链接: utcz.com/qa/425493.html

回到顶部