以下代码将整个数组作为单个值保存在 Redis 列表中。但我想单独保存数组值。我该怎么做?
P.S 很抱歉英语不好。
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
将抛出 RangeError: Maximum call stack size exceeded
。
来自 MDC:
应用带有太多参数的函数的后果 (思考超过数万个参数)因引擎而异 (JavaScriptCore 的硬编码参数限制为 65536),因为 限制(实际上甚至是任何超大堆栈行为的性质) 未指定。有些引擎会抛出异常。更多的 有害的是,其他人会任意限制参数的数量 实际上传递给了应用函数。
从“redis”导入{createClient};
const redisClient = createClient();
常量 arr = [1, 2, 3];
异步函数cacheList(){等待Promise.all(arr.map((elem)=> redisClient.rPush(“testlist”,elem))); }