PooledRedisClientManager不释放连接

Jas*_*son 4 c# castle-windsor redis servicestack

我在redis中存储json数据列表并使用ServiceStack c#client访问它.我基本上管理我自己的外键,我存储一个zrangeid,我使用我的应用程序内部的接口从中提取id zrange然后从Redis获取底层json对象并将它们打包为列表以返回到其他部分我的申请

我正在使用,PooledRedisClientManager因为我预计Redis将托管在与执行代码的服务器不同的服务器上.

我正在使用MSOpenTech Redis服务器在Windows 8上本地完成所有开发工作.目前我最大的挑战是客户端连接没有被关闭.

我的Redis persister正在注入一个IRedisClientManager(IoC是CastleWindsor)的实例.此代码在azure worker角色的上下文中执行.

这是我从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)
                    };
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我用来注册的代码 IRedisClientManager

var mgr = new PooledRedisClientManager(100, 10, "localhost:6379");
container.Register(Component.For<IRedisClientsManager>().Instance(mgr).LifeStyle.Singleton);
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

paa*_*hpa 8

目前我最大的挑战是客户端连接没有被关闭.

您正在使用'PooledRedisClientManager',因此我的理解是不应关闭客户端连接,只需将其放入池中以便重用.看起来你的游泳池大小是100个连接.

您可以尝试使用 var mgr = new BasicRedisClientManager("localhost:6379") 哪个应该处理客户端.