【问题标题】:redis.lpush a number of itemsredis.lpush 若干项
【发布时间】:2013-08-08 07:31:37
【问题描述】:

在我的node.js 脚本中,我有一个字符串数组,我想将LPUSH 这些字符串放入Redis 队列中。我试过了:

var redis = require('redis').createClient();
redis.lpush('queue', ['1', '2', '3'])

这会导致单个字符串被推送:

redis 127.0.0.1:6379> lrange queue 0 -1
1) "1,2,3"

Redis 在LPUSH 命令中支持多个值,我正在寻求有关使用此功能的帮助。我不是在问如何遍历我的数组并分别推送每个项目。 :)

编辑:

我知道我是否这样做:

redis.lpush('queue', '1', '2', '3')

我得到了我的期望,但在我的实际应用程序中,数组是在运行时生成的,我不知道它的内容。

【问题讨论】:

    标签: node.js node-redis


    【解决方案1】:

    现在可以使用es6 spread syntax。任何大小的数组都将作为函数的参数展开。

    redis.lpush('queue', ...arrayOfValues)
    

    【讨论】:

    • 您甚至不再需要使用扩展语法。只需传递一个数组就足够了。附言此答案比接受的答案更新。
    【解决方案2】:

    这似乎是known issue/common request

    建议的解决方法之一是使用send_command directly

    你也可以试试这个(我自己没试过):

    myvalues.unshift('queue');
    redis.lpush.apply(redis, myvalues);
    

    【讨论】:

    • 谢谢。 send_commandapply 都可以工作,除了 unshift 返回新的长度,所以我不得不将它作为一个单独的语句。
    • >= 2.4:接受多个值参数。在早于 2.4 的 Redis 版本中,可以为每个命令推送一个值。 doc
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多