我有一个如下的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服务器中查找频道列表时,如何列出所有频道。 该程序运行正常。
答案 0 :(得分:1)
PUBSUB频道
列出当前活动的频道。有效频道是具有一个或多个订阅者(不包括订阅模式的客户端)的发布/订阅频道。
您的代码使用PSUBSCRIBE
命令并订阅一个模式,而不是一个频道,因此PUBSUB CHANNELS
返回一个空列表。
此外,您还可以查看PUBSUB NUMPAT命令,该命令返回模式数。