如何将javascript数组保存为redis列表

问题描述 投票:0回答:3

以下代码将整个数组作为单个值保存在 Redis 列表中。但我想单独保存数组值。我该怎么做?

P.S 很抱歉英语不好。

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

var arr = [1,2,3];

client.rpush('testlist',arr);
javascript node.js redis node-redis
3个回答
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。


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: Maximum call stack size exceeded

来自 MDC:

应用带有太多参数的函数的后果 (思考超过数万个参数)因引擎而异 (JavaScriptCore 的硬编码参数限制为 65536),因为 限制(实际上甚至是任何超大堆栈行为的性质) 未指定。有些引擎会抛出异常。更多的 有害的是,其他人会任意限制参数的数量 实际上传递给了应用函数。


0
投票

从“redis”导入{createClient};

const redisClient = createClient();

常量 arr = [1, 2, 3];

异步函数cacheList(){等待Promise.all(arr.map((elem)=> redisClient.rPush(“testlist”,elem))); }

© www.soinside.com 2019 - 2024. All rights reserved.