如何将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循环相加