php-resque icon indicating copy to clipboard operation
php-resque copied to clipboard

Cannot use 'KEYS' with redis-cluster.

Open fredams opened this issue 5 years ago • 3 comments

Hi, i'm using predis, but when i start the workers i'm getting this message:

** [12:21:53 2019-10-25] Starting worker 
                                       
  [Predis\NotSupportedException]         
  Cannot use 'KEYS' with redis-cluster.  

Config file:

predis:
  namespace:  namespace
  config:
    - "tcp://server1:9991"
    - "tcp://server1:9992"
    - "tcp://server1:9993"
  options:
    cluster: "redis"

Can anyone help me please? thanks

fredams avatar Oct 25 '19 11:10 fredams

is there a stacktrace too?

scones avatar Oct 28 '19 11:10 scones

Sure

** [12:21:53 2019-10-25] Starting worker 

                                         
  [Predis\NotSupportedException]         
  Cannot use 'KEYS' with redis-cluster.  
                                         

Exception trace:
 () at WORK_DIR/composer/vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php:380
 Predis\Connection\Aggregate\RedisCluster->getConnection() at WORK_DIR/composer/vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php:550
 Predis\Connection\Aggregate\RedisCluster->retryCommandOnFailure() at WORK_DIR/composer/vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php:593
 Predis\Connection\Aggregate\RedisCluster->executeCommand() at WORK_DIR/composer/vendor/predis/predis/src/Client.php:331
 Predis\Client->executeCommand() at WORK_DIR/composer/vendor/predis/predis/src/Client.php:314
 Predis\Client->__call() at n/a:n/a
 call_user_func_array() at WORK_DIR/composer/vendor/mjphaynes/php-resque/src/Resque/Redis.php:340
 Resque\Redis->__call() at WORK_DIR/composer/vendor/mjphaynes/php-resque/src/Resque/Worker.php:846
 Resque\Worker->cleanup() at WORK_DIR/composer/vendor/mjphaynes/php-resque/src/Resque/Worker.php:402
 Resque\Worker->startup() at WORK_DIR/composer/vendor/mjphaynes/php-resque/src/Resque/Worker.php:235
 Resque\Worker->work() at WORK_DIR/composer/vendor/mjphaynes/php-resque/src/Resque/Commands/Worker/Start.php:73
 Resque\Commands\Worker\Start->execute() at WORK_DIR/composer/vendor/symfony/console/Command/Command.php:264
 Symfony\Component\Console\Command\Command->run() at WORK_DIR/composer/vendor/symfony/console/Application.php:841
 Symfony\Component\Console\Application->doRunCommand() at WORK_DIR/composer/vendor/symfony/console/Application.php:206
 Symfony\Component\Console\Application->doRun() at WORK_DIR/composer/vendor/symfony/console/Application.php:125

fredams avatar Oct 28 '19 12:10 fredams

Thanks for reporting this issue, @fredams and for the quick response, @scones!

Apparently, KEYS should not be used according to the Redis-Docs[1], so the Predis Library used by php-resque does not support it for clustered configurations[2].

The best solution would be to refactor the related code to use SCAN or Redis sets instead of KEYS. PRs are welcome for that :smile:

[1] https://redis.io/commands/keys [2] https://github.com/nrk/predis/issues/172

xelan avatar Nov 04 '19 11:11 xelan