我的团队有一个使用Lumen(基于Laravel的微型框架)的项目。我们使用Predis连接我们的Redis集群并在其上运行一些队列作业。但有时(我们无法重新生产)系统将引发“中没有留在池中的连接为CLUSTER SLOTS
..”异常使用流明中的PRedis库时,池中没有任何连接留在池中用于Redis群集的群集插槽
[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库在尝试建立连接时未重新打开连接。
,这里是我们的集群设置结构:
'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
],
...
]
]
]
任何一个有关于它的想法?非常感谢你!