2013-08-07 4 views
4

В моем сценарии node.js у меня есть массив строк, и я хочу, чтобы эти строки в очередь Redis были в LPUSH. Я пробовал:redis.lpush a number of items

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

что приводит к одной строке толкает:

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

Redis поддерживает несколько значений в LPUSH команды, я ищу помощь по использованию этой функции. Я не спрашиваю, как перебрать мой массив и нажимать каждый элемент отдельно. :)

EDIT:

Я знаю, что если я делаю это:

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

Я получаю то, что я ожидал, но в моем реальном приложении массив генерируется во время выполнения, и я не знаю, его содержание.

ответ

7

Это, как представляется known issue/common request

Один из предложенных обходных путей заключается в использовании send_command directly

Вы также можете попробовать это (не пробовал это сам):

myvalues.unshift('queue'); 
redis.lpush.apply(redis, myvalues); 
+0

спасибо. как 'send_command', так и' apply', за исключением 'unshift' возвращает новую длину, поэтому я должен был сделать это как отдельный оператор. – akonsu

+0

Извините - пропустил это - обновил код с исправлением. – dc5

+0

> = 2.4: Принимает несколько аргументов значения. В версиях Redis старше 2.4 можно было нажать одно значение для каждой команды. [Док] (http://redis.io/commands/lpush) – sarkiroka

0

Это теперь можно с es6 spread syntax. Массив любого размера будет распространен как аргумент функции.

redis.lpush('queue', ...arrayOfValues)