use*_*545 8 javascript redis node.js node-redis
以下代码将整个数组保存为redis列表中的单个值.但我想单独保存数组值.我该怎么做?
PS很抱歉英语不好.
var redis = require('redis'),
client = redis.createClient();
var arr = [1,2,3];
client.rpush('testlist',arr);
Run Code Online (Sandbox Code Playgroud)
gim*_*ete 17
用于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) {
})
Run Code Online (Sandbox Code Playgroud)
最后调用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);
}));
Run Code Online (Sandbox Code Playgroud)
优点: - 一条指令将被传送到Redis
缺点: - 一个角落案例:如果传递给rpush的参数列表长度太大(v8略多于10万个项目),.apply
将抛出一个RangeError: Maximum call stack size exceeded
.
来自MDC:
应用具有太多参数的函数(想想超过数万个参数)的结果因引擎而异(JavaScriptCore的硬编码参数限制为65536),因为限制(实际上甚至是任何过大堆栈的性质)行为)未指定.有些引擎会抛出异常.更有害的是,其他人会随意限制实际传递给应用函数的参数数量.
归档时间: |
|
查看次数: |
14032 次 |
最近记录: |