如何将JavaScript数组保存为Redis列表

15
以下代码将整个数组作为单个值保存在Redis列表中。但我想逐个保存数组值。我该怎么做?
P.S 很抱歉我的英语不好。
var redis = require('redis'),
    client = redis.createClient();

var arr = [1,2,3];

client.rpush('testlist',arr);

1
你想遍历数组元素并逐个插入它们。你可以编写一个简单的 for 循环或使用 Array.prototype.forEach - fardjad
2个回答

24

使用 multi() 来一次性地执行多个命令:

var redis = require('redis'),
    client = redis.createClient();

var arr = [1,2,3];

var multi = client.multi()

for (var i=0; i<arr.length; i++) {
    multi.rpush('testlist', arr[i]);
}

multi.exec(function(errors, results) {

})

最后调用 exec() 命令将命令发送给redis。


使用redis-node对我而言并不起作用,在这里稍作修改:https://gist.github.com/vainrobot/141b2162e1200f7c7855 - fullstacklife

9
即使 @gimenete 的回答有效,但最好的方法是将列表元素作为参数转发到 `rpush` 中,就像这样:
var redis = require('redis'),
    client = redis.createClient();

var arr = [1,2,3];
client.rpush.apply(client, ['testlist'].concat(arr));

// ... or with a callback
client.rpush.apply(client, ['testlist'].concat(arr).concat(function(err, ok){
  console.log(err, ok);
}));

优点: - 一条指令将被传输到Redis。

缺点: - 一个边角案例:如果传递给rpush的参数列表长度过长(对于v8来说,略高于100,000个项目),则.apply将抛出RangeError:最大调用堆栈大小超过。 - 来自MDC的信息:

应用具有太多参数的函数的后果(想象一下成千上万的参数)因引擎而异(JavaScriptCore具有硬编码的65536个参数限制),因为限制(实际上甚至是任何过度大的堆栈行为的性质)未指定。有些引擎会抛出异常。更有害的是,其他引擎将任意限制实际传递给应用程序的参数数量。


对我无效。错误:ERR 'rpush' 命令的参数数量错误。 - Thant Sin Aung
我的Node.js文件中只有这段代码,没有其他的。 - Thant Sin Aung
抱歉,我的 Redis 服务器出问题了。我在 Windows 上使用它,不能使用多个值执行RPUSH命令。 - Thant Sin Aung

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接