以下代码将整个数组保存为redis列表中的单个值。但我想单独保存数组值。我该怎么做?
P.S很抱歉英语不好。
var redis = require('redis'),
client = redis.createClient();
var arr = [1,2,3];
client.rpush('testlist',arr);
答案 0 :(得分:16)
使用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。
答案 1 :(得分:6)
即使@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略多于10万个项目),.apply
将抛出RangeError: Maximum call stack size exceeded
。
来自MDC:
应用具有太多参数的函数的后果 (想想成千上万的论点)因引擎而异 (JavaScriptCore的硬编码参数限制为65536),因为 限制(实际上甚至是任何过大的堆栈行为的性质) 没有具体说明。有些引擎会抛出异常。更多 有害的是,其他人会随意限制论点的数量 实际上传递给了应用函数。