首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Lumen中使用PRedis库时,Redis集群的集群槽池中没有任何连接

在Lumen中使用PRedis库时,Redis集群的集群槽池中没有任何连接
EN

Stack Overflow用户
提问于 2017-08-22 00:50:15
回答 1查看 4.6K关注 0票数 1

我的团队有一个使用Lumen的项目(这是一个基于Laravel的微观框架)。我们使用Predis连接我们的Redis集群并在其上运行一些队列作业。但有时(我们不能重新生成)系统会抛出“CLUSTER SLOTS池中没有剩下的连接。”异常

代码语言:javascript
运行
复制
[2017-08-17 14:05:35] bookmark.ALERT: Predis\ClientException: No connections 
left in the pool for `CLUSTER SLOTS` in 
....../vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php:232 
Stack trace: 
#0 ....../vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php(260): 
Predis\Connection\Aggregate\RedisCluster->queryClusterNodeForSlotsMap(NULL) 
#1 ....../vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php(560): 
Predis\Connection\Aggregate\RedisCluster->askSlotsMap() 
...

我们调查了很长时间。我们认为问题可能在于Laravel的Predis库,以及它维护连接池的方式。这可能是因为Redis集群由于某种原因关闭了连接,但是Predis库在尝试连接时没有重新打开连接。

下面是我们的集群设置结构:

代码语言:javascript
运行
复制
'redis' => [
'client' => 'predis',

'clusters' => [
    // Setting for Queue
    'default' => [
        'options' => [ 'cluster' => 'redis' ],
        [
            'host' => 'xxx',
            'password' => 'xxx',
            'port' => 'xxx',
            'timeout' => 0.15,
            'read_write_timeout' => 0.15
        ],
        [
            'host' => 'xxx',
            'password' => 'xxx',
            'port' => 'xxx',
            'timeout' => 0.15,
            'read_write_timeout' => 0.15
        ],
        ...
    ]
]
]

有人知道吗?非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2017-09-20 04:49:57

因为您只是间歇性地看到这些异常,所以'redis'配置中的超时值可能太低。我只能猜测,PHP和Redis服务器之间网络上的大量通信会减缓通信速度,从而导致客户端连接超时(按配置的0.15秒之后)。

当Predis客户端无法从所有配置的Redis主机获取插槽映射时,它将抛出No connections,当它从所有配置的Redis主机获取时隙映射时(可能是因为它们都超时了)。您可以通过设置一个非常小的超时值(如0.0001 )来再现此行为。

尝试增加超时值,并考虑监视网络中可能导致延迟的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45807401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档