8

In my node.js script I have an array of strings, and I want to LPUSH these strings into a Redis queue. I tried:

var redis = require('redis').createClient();
redis.lpush('queue', ['1', '2', '3'])

which results in a single string being pushed:

redis 127.0.0.1:6379> lrange queue 0 -1
1) "1,2,3"

Redis supports multiple values in LPUSH command, I am looking for help on utilizing this functionality. I am not asking how to loop over my array and push each item separately. :)

EDIT:

I know if I do this:

redis.lpush('queue', '1', '2', '3')

I get what I expect, but in my real application the array is generated at run time, and I do not know its contents.

akonsu
  • 28,824
  • 33
  • 119
  • 194

2 Answers2

22

This is now possible with es6 spread syntax. An array of any size will be spread out as the arguments to the function.

redis.lpush('queue', ...arrayOfValues)
SofieGraham
  • 291
  • 3
  • 5
  • 1
    You don't even need to use spread syntax anymore. Just passing an array will suffice. P.S. This answer is more up to date than the accepted answer. – Richard Dunn Sep 24 '19 at 09:02
8

This appears to be a known issue/common request

One of the suggested workarounds is to use send_command directly

You might also try this (haven't tried this myself):

myvalues.unshift('queue');
redis.lpush.apply(redis, myvalues);
dc5
  • 12,341
  • 2
  • 35
  • 47
  • thanks. both `send_command` and `apply` work, except for `unshift` returns the new length, so I had to do it as a separate statement. – akonsu Aug 07 '13 at 04:49
  • 1
    >= 2.4: Accepts multiple value arguments. In Redis versions older than 2.4 it was possible to push a single value per command. [doc](http://redis.io/commands/lpush) – sarkiroka Sep 26 '16 at 10:03