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

Posted

技术标签:

【中文标题】如何将javascript数组保存为redis列表【英文标题】:How to save javascript array as redis list 【发布时间】: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 【参考方案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。

【讨论】:

使用不适合我的 redis-node,这里稍作修改:gist.github.com/vainrobot/141b2162e1200f7c7855【参考方案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

以上是关于如何将javascript数组保存为redis列表的主要内容,如果未能解决你的问题,请参考以下文章

如何将在JavaScript中保存为数组的数字与while循环相加

如何从SharePoint列表创建javascript数组?

将 Javascript 数组转换为 C# 列表

如何在python中将列表保存为numpy数组?

如何将 Javascript 数组发布到 C# 元组列表?

将 C# 列表转换为 javascript 数组