当前位置: 首页 > 知识库问答 >
问题:

Redis不退订

丌官浩旷
2023-03-14

我有一个用于pub-sub的redis客户端。我正在使用websocket消息处理程序动态订阅redis频道。websocket消息的有效负载包含我用来创建频道名称的ID。例如lobbyID:${lobbyID}:joined。订阅此频道效果良好,发布到该频道时会收到消息。

但我遇到的问题是,我想在某个时候取消这个频道的订阅。通过阅读redis文档,我的假设是,我会使用punsubscribe,这样我就可以使用lobble::::joined,从任何频道取消订阅,但尝试后仍会收到消息。

import redis from 'redis';

const subClient = redis.createClient();

subClient.on('message', (channel, message) => {
  // Received message x on channel y
});

const socketHandlerSubscribe = (lobbyID) => {
  subClient.subscribe(`lobby:${lobbyID}:joined`);
}

const socketHandlerUnsubscribe = () => {
  subClient.punsubscribe('lobby:*:joined'); // true
}

当使用redis cli时,该模式在使用PUBSUB CHANNEL Lobble:::::joined时似乎有效。我也可以通过将大厅ID传递给unsubscribe处理程序来解决这个问题,但是punsubscribe应该是解决这个问题的方法。

我在前面的一个场景中也遇到了这种情况,我在状态:${userID}上循环了一系列用户ID,为每个用户创建了订阅,并在状态:上尝试了punsubscribe,但没有成功。

我做错了什么还是这是一个节点相关的问题?我正在使用redis版本2.8.0

共有1个答案

司寇琨
2023-03-14

我注意到有两种不同类型的订阅。关于渠道和模式。在我的问题中,我订阅了一个频道,取消订阅了一个模式,这两个模式不“兼容”,所以这不起作用。我使用了nc来调试它,因为redis cli在进入订阅状态时不允许使用其他命令。

 类似资料:
  • 考虑三个函数: 他们似乎都没有返回。这些函数的返回值的行为有什么不同吗?有什么理由偏爱其中一个而不是另一个吗?

  • 我们正在尝试将Redis/Sentinel集群从2.8升级到3.2。升级将在交通繁忙的情况下发生。对我们来说,没有停机时间是可以接受的。 当我们准备升级主服务器时,所有从服务器都将运行在3.2上,并且这些从服务器能够与运行在2.8上的主服务器同步 一旦我们停止主服务器(2.8)或手动请求故障转移,新服务器(3.2)将成为主服务器。 我们希望将旧的master(2.8)保留一段时间,以便在发现新设置

  • 问题内容: 我将使用解决方案来更新此问题,我想包括我的问题和解决方案,因为我无法在Stackoverflow上找到它。如果您想加入解决方案,请放心。 我有一个使用Visual Studio 2013创建的新创建的“空” MVC5项目。如果可能,我需要from并想要AJAX行为。在MVC3中使用Ajax.BeginForm总是很简单,所以我认为在MVC5中也是如此。 但是,当我单击“提交”按钮时,在

  • 问题内容: 我使用ServiceStack.Redis(从最新资源构建:https : //github.com/ServiceStack/ServiceStack.Redis/tree/master/src)。 我做这样的事情: 我试图调试使用 哪个返回。我分配给validityPeriodInMinutes的值都没有关系。 我试过藏汉,,,。我也尝试过这样的事情: 任何的想法? 问题答案: 抱

  • 问题内容: 我“d成的运行Django的服务器,我不能简单地和出来。 是否有其他摆脱困境的方法? 目前,我手动关闭本地PC上的选项卡,然后再重新打开,但这变得很烦人。 问题答案: 或 。请参阅屏幕手册#分离。

  • 我的Redis Sentinel故障转移不起作用,当master完成时,不进行握手,故障转移也不发生;然而,sentinel会显示主程序何时恢复到正常状态或何时关闭。我的sentinel.conf文件内容如下: 我真的很感激你能帮上忙。