当前位置: 首页 > 面试题库 >

PooledRedisClientManager不释放连接

澹台鸿熙
2023-03-14
问题内容

我在Redis中存储json数据列表,并使用ServiceStack
c#客户端访问它。我本质上是在管理自己的外键,在其中存储zrangeid,然后使用应用程序内部的接口从中提取ID
zrange,然后从Redis获取基础json对象并将其打包为列表以返回其他部分我的申请。

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

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

我的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") 应该处理客户端的方法。



 类似资料:
  • Tomcat在使用后不释放连接的原因可能是什么? 这是我的配置

  • 我的MongoDB数据库具有快速增长的活动连接量。 我编写了一个代码来测试连接创建/关闭流程是如何工作的。这段代码总结了我如何在项目中使用库。 我发现了一件很奇怪的事,我不明白。根据我们创建新连接的方式(同步/异步),行为会有所不同。 如果我们同步创建连接-mongo在调用方法。 如果我们异步创建连接,mongo即使在调用方法。 > 是否有其他方法强制关闭连接插座? 它会在一段时间后自动关闭这些打

  • 我正在使用spring rest模板发送与apache http client 4.2.1集成的rest请求。 由于需要向多个服务器发送请求,增加了PoolingClientConnectionManager来管理连接。 当系统运行几天后,我们发现连接达到了最大每路由设置。 打印日志如下所示保持活动的总数:0;分配路线:5选5;分配总数:100个中的5个 似乎由于某种原因,连接没有被释放。但是当我

  • 问题内容: 我遍历了一堆URL,对于每个URL,我都在执行以下操作: 第一个查询很好,第二个查询抛出此异常: 线程“主”中的异常java.lang.IllegalStateException:无效使用SingleClientConnManager:仍然分配了连接。在分配另一个之前,请确保释放连接。在org.apache.http.impl.conn.SingleClientConnManager。

  • C3P0不会在事务完成后释放连接。下面是堆栈跟踪: 池配置和事务配置如下: 如有任何建议,我将不胜感激

  • 这是我对Rest模板的配置,