PUBSUB CHANNELS返回空列表

时间:2019-04-23 12:43:49

标签: python-2.7 redis publish-subscribe

我有一个如下的python程序

import json
import threading

import redis

CHANNELS_PREFIX = 'client'


class Listener(threading.Thread):
    STOP = 1
    CONTINUE = 0

    def __init__(self, r):
        threading.Thread.__init__(self)
        self.redis = r
        self.pubsub = self.redis.pubsub()
        self.pubsub.psubscribe(["%s:*" % CHANNELS_PREFIX])

    def reload(self, data):
        print "Reloaing", data
        return Listener.CONTINUE

    def shutdown(self, data):
        self.pubsub.unsubscribe()
        print "unsubscribed and finished"
        return Listener.STOP

    def run(self):
        for item in self.pubsub.listen():
            print item
            type = item['type']
            if type == 'psubscribe':
                continue
            data = item['data'].strip()
            channel, method_name = item['channel'].split(':')
            method = getattr(self, method_name)
            if method is not None:
                if method(data) == Listener.STOP:
                    break


class Publisher():

    def __init__(self, r):
        self.redis = r

    def key(self, command):
        return "%s:%s" % (CHANNELS_PREFIX, command)

    def send(self, command, data):
        self.redis.publish(self.key(command), json.dumps(data))

if __name__ == "__main__":
    client = Listener(redis.Redis())
    client.start()

    publisher = Publisher(redis.Redis())

执行此操作并尝试使用redis-cli通过“ PUBSUB CHANNELS”获取空列表在Redis服务器中查找频道列表时,如何列出所有频道。 该程序运行正常。

1 个答案:

答案 0 :(得分:1)

  

PUBSUB频道

     

列出当前活动的频道。有效频道是具有一个或多个订阅者(不包括订阅模式的客户端)的发布/订阅频道。

您的代码使用PSUBSCRIBE命令并订阅一个模式,而不是一个频道,因此PUBSUB CHANNELS返回一个空列表。

此外,您还可以查看PUBSUB NUMPAT命令,该命令返回模式数。