【问题标题】:How to save javascript array as redis list如何将javascript数组保存为redis列表
【发布时间】:2013-11-13 17:50:50
【问题描述】:

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

P.S 很抱歉英语不好。

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

var arr = [1,2,3];

client.rpush('testlist',arr);

【问题讨论】:

  • 您想遍历数组元素并单独插入它们。您可以编写一个简单的for 循环或使用Array.prototype.forEach

标签: javascript node.js redis node-redis


【解决方案1】:

使用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。

【讨论】:

【解决方案2】:

即使@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

缺点: - 一个极端情况:.apply 将抛出 RangeError: Maximum call stack size exceeded 如果传递给 rpush 的参数列表长度太大(v8 的项目超过 100 000 个)。

来自 MDC:

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

【讨论】:

  • 不适合我。 Error: ERR wrong number of arguments for 'rpush' command.
  • 正如您键入的那样。我的节点 js 文件中没有其他代码。
  • 对不起,这是我的redis服务器的问题。我在窗口上使用它,无法执行具有多个值的RPUSH
猜你喜欢
  • 2021-07-28
  • 1970-01-01
  • 2016-08-21
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
相关资源
最近更新 更多