以下代码将整个数组保存为 redis 列表中的单个值。但我想单独保存数组值。我该怎么做?
PS 很抱歉英语不好。
var redis = require('redis'),
client = redis.createClient();
var arr = [1,2,3];
client.rpush('testlist',arr);
以下代码将整个数组保存为 redis 列表中的单个值。但我想单独保存数组值。我该怎么做?
PS 很抱歉英语不好。
var redis = require('redis'),
client = redis.createClient();
var arr = [1,2,3];
client.rpush('testlist',arr);
用于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。
即使@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
将抛出 a 。RangeError: Maximum call stack size exceeded
来自 MDC:
应用带有太多参数的函数(考虑超过数万个参数)的后果因引擎而异(JavaScriptCore 的硬编码参数限制为 65536),因为限制(实际上甚至是任何过大堆栈的性质行为)未指定。有些引擎会抛出异常。更有害的是,其他人会任意限制实际传递给应用函数的参数数量。