Redis消息队列有不足,它不支持消息的多播机制。Redis为了支持消息多播,不能再依赖那5种基本的数据类型了,它单独使用了一个模块来支持消息多播----->PubSub
sub.py
import redis
import time
client = redis.StrictRedis(host="47.100.xx.xx",port=6379,db=0,password="111111")
p = client.pubsub()
p.subscribe("codehole")
while True:
msg = p.get_message()
if not msg:
time.sleep(1)
continue
print(msg)
pub.py
import redis
client = redis.StrictRedis(host="47.100.xx.xx",port=6379,db=0,password="111111")
client.publish("codehole","python games")
client.publish("codehole","java games")
client.publish("codehole","golang games")
先启动2个sub 再1个pub 发现2个sub 都收到了相同的消息
消费者sub 如果是使用休眠的方式来轮训消息,也会遭遇消息处理不及时的问题。是用listen 优化
import redis
client = redis.StrictRedis(host="47.100.184.180",port=6379,db=0,password="111111")
p = client.pubsub()
p.subscribe("codehole")
for msg in p.listen():
print(msg)