模式订阅
模式订阅功能允许客户端订阅一类频道,而不是单个频道。模式订阅使用通配符来匹配多个频道,如下所示:
PSUBSCRIBE pattern [pattern ...]
:订阅一个或多个符合给定模式的频道,模式使用通配符(*和?)来匹配多个频道PUNSUBSCRIBE [pattern [pattern ...]]
:取消订阅一个或多个符合给定模式的频道
下面是一个模式订阅的示例:
代码语言:javascript复制import redis
import threading
# 创建Redis连接
r = redis.Redis(host='localhost', port=6379, db=0)
# 发布消息的方法
def publish_message():
while True:
message = input("Please input your message:")
r.publish('my_channel', message)
# 订阅频道的方法
def subscribe_channel():
p = r.pubsub()
p.psubscribe('my_*')
for message in p.listen():
print(f"Received message: {message['data'].decode('utf-8')}")
# 启动两个线程,一个用于发布消息,一个用于订阅频道
if __name__ == '__main__':
t1 = threading.Thread(target=publish_message)
t2 = threading.Thread(target=subscribe_channel)
t1.start()
t2.start()
在上面的示例中,我们使用p.psubscribe('my_*')
方法订阅所有以my_开头的频道。这里使用通配符*表示匹配任意字符。在接收到消息时,我们使用message['channel'].decode('utf-8')
方法获取消息所在的频道名称,然后打印出来。
频道模式的退订
Redis提供了两种退订模式订阅的方法,分别是退订当前模式下的所有频道和退订当前模式下的指定频道。
PUNSUBSCRIBE
:退订当前模式下的所有频道PUNSUBSCRIBE pattern
:退订当前模式下的指定频道