【问题标题】:lrange returns false instead of the listlrange 返回 false 而不是列表
【发布时间】:2019-01-01 14:52:09
【问题描述】:

我正在尝试使用 Redis 制作自己的简单消息队列。

但是,我在使用 Redis 创建队列时遇到问题。

我在项目的其他部分使用 Redis 进行缓存,所以我确信 redis 连接很好(+ 我尝试打印出实例,看起来很好)。

message_queue.js

const redis = require("./redis.js");

var sendMessage = async (queue) => {
    var result = await redis.rpush(queue,5);
    console.log(result);
    var arr = await redis.lrange(queue,0,-1);
    console.log(arr);
};

redis.js

const redis = require('redis');
const redisinfo = require('../secret/redisinfo.js');
const client = redis.createClient(redisinfo);

client.on("error",function(err){
    console.log("Error " + err);    
});

module.exports = client;

当我从 message_queue.js 运行 sendMessage 函数时, 它打印 false 和 false。

将项目推入队列并打印它我做错了什么?在此过程之前我是否需要做一些事情,例如声明一个列表?

附言 我不知道这是否是使用这个包的正确方法,但似乎我需要使用回调函数来访问结果......

以下代码按预期工作

redis.lrange(queue,0,-1,function(err,res){
    if(res.length != 0){
        console.log(`Something is in queue`);
    }
});

【问题讨论】:

    标签: node.js list redis push


    【解决方案1】:

    你不需要在 Redis 中“声明”列表,RPUSH 应该在第一次使用时在指定的 key 下创建一个列表。

    您是否可能已经使用了密钥名称并存储了不是列表的内容?这将解释您所看到的行为。在这种情况下,首先在 Redis 中运行 DEL <key> 来修复它。

    【讨论】:

    • 你能链接你正在使用的redis模块吗? false 返回值对我来说似乎完全错误(RPUSH,在我使用过的任何库中,都应该返回添加的元素数量或抛出异常)。模块中可能存在错误,或者如果您使用一些自定义包装器,则包装器中可能存在错误。
    • 我发现如果我必须使用回调函数来访问结果。我不知道这是否是使用它的正确方法,但这就是我现在使用它的方式
    • 啊,有道理 - 如果您查看您发布的链接中的文档,它们提供了承诺库的示例,这将允许您使用承诺而不是回调。或者,您始终可以在任何给定函数上使用 node 的内置 util.promisify 而不是 bluebird。
    猜你喜欢
    • 2021-06-04
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 2014-04-24
    相关资源
    最近更新 更多