当前位置: 首页 > 面试题库 >

如何重定向Redis订阅的输出

章海
2023-03-14
问题内容

我正在探索Redis做发布/订阅。我想编写一个脚本,该脚本使用redis-cli订阅频道并转储发布到文件的所有内容。但是我注意到的是redis-cli
subscripe channel>输出效果不佳。

非常感谢您的帮助。

问候,Kashyap


问题答案:

这是因为当redis-cli显示与订阅关联的消息时,不会自动刷新标准输出。因此,停止redis-cli之前的最后一条消息不会出现在输出文件中。

没有可以用来强制执行系统刷新的选项,需要修补redis-cli.c。在Redis源代码中,编辑src / redis-
cli.c,然后找到以下代码。添加缺少的fflush行。

    if (config.pubsub_mode) {
        if (config.output != OUTPUT_RAW)
            printf("Reading messages... (press Ctrl-C to quit)\n");
        while (1) {
            if (cliReadReply(output_raw) != REDIS_OK) exit(1);
            // The following line must be added
            fflush(stdout);
        }
    }

一旦重新编译了redis-cli,它便会按预期工作。



 类似资料:
  • 问题内容: 当前,我正在使用node.js和redis来构建应用程序,使用redis的原因是由于发布/订阅功能。该应用程序只是在用户进入用户或不在房间时通知管理员。 由于我想听join和disjoin事件,我的问题是我是否应该使用两个redisclient来听这两个事件,例如 或者只是使用一个redisclient来监听和分离回调中的逻辑 我知道这两种方式都是可行的,但是我不知道人们在哪种情况下会

  • 问题内容: 我正在使用https://github.com/miguelgrinberg/Flask- SocketIO 来实现WebSocket服务器。 我需要从另一个进程(仅订阅)接收消息,并为特定房间中的客户端发出消息。 但是,当我尝试发送消息时,出现此错误: 无法将消息发送到家庭会议室:在请求上下文之外工作。 这是我的代码: 问题答案: 我解决了将应用程序作为参数传递给类并按照错误描述的建

  • 主要内容:发布/订阅流程,常用命令汇总,基本命令应用Redis PubSub 模块又称发布订阅者模式,是一种消息传递系统,实现了消息多播功能。发布者(即发送方)发送消息,订阅者(即接收方)接收消息,而用来传递消息的链路则被称为  channel。在 Redis 中,一个客户端可以订阅任意数量的 channel(可译为频道)。 消息多播:生产者生产一次消息,中间件负责将消息复制到多个消息队列中,每个消息队列由相应的消费组进行消费,这是分布式系统常用的

  • 我喜欢做一个有redis回应的SSE。在quarkus中订阅。 我有一个来自quarkus快速入门的简单SSE示例 这个效果很好,每2秒钟我就会收到Hello。。。。在我的web浏览器中 现在我尝试订阅Redis,所以我应该会收到Redis的消息。 Redis示例: 现在,我用quarkus SSE尝试以下方法: 我收到的是一个例外: 有人能支持我吗?有一个简单的例子吗?我对此一无所知,我无法接收

  • 问题内容: 我想创建一个发布-订阅基础结构,其中每个订阅者都将收听多个(例如100k)频道。 我认为可以将Redis PubSub用于此目的,但是我不确定在这里订阅数千个频道是否是最佳实践。为了回答这个问题,我想知道Redis中的订阅机制在后台如何工作。 另一种选择是为每个订户创建一个频道,并在两者之间放置一些组件,该组件将获取所有消息并将其发布到相关的频道。 还有其他想法吗? 问题答案: Sal

  • 语境: 给定一个WooCommerce和WooCommerce订阅的WordPress网站,我试图获取特定用户订阅的列表。在最近的更新之前,这一行代码已经为我解决了这个问题。以下是我一直在使用的代码: 其中$user\u id是WordPress中的有效用户id。 问题: 自上次更新以来,我们经常看到以下错误: 致命错误:在/home/warfarep/public_html/wp content