由于redis消息队列并不支持多播机制,即生产者产出一次,由中间件复制发送给多个消费者的机制,为了弥补这个不足,单独引入了发布订阅模式的模块。使用方式如下:
#生产者
import redis
client = redis.StrictRedis()
client.publish('ll','pythonbooks come')
client.publish('ll','javabooks come')
client.publish('ll','gobooks come')
#消费者
import redis
client = redis.StrictRedis()
p = client.pubsub()
p.subscribe('ll')
for msg in p.listen():
print(msg)
使用时注意:
- 必须要先启动消费者,才能启动生产者。
- 消费者执行过程是阻塞的,会一直等待生产者的信息
- 可以一次订阅多个key,可以用
*
符号作为通配符
pubsub模式的缺点:
- 断开连接的消费者重新连接时收不到断开时间内的消息。
- 如果redis重新启动,pubsub消息无法持久化,相当于丢弃了所有消息。
而解决这个缺点就需要使用一种新的数据结构stream。
具体请转:
redis-stream详解:http://www.redis.cn/topics/streams-intro.html