命令 | 用例和描述 |
---|---|
subscribe | subscribe channel [channel ...]------订阅给定得一个或者多个频道 |
unsubscribe | unsubscribe channel [channel ...]------退订给定得一个或者多个频道,不传参则退订所有频道 |
publish | pushlish channel message------ 向给定频道发送消息 |
具体python代码实现
import threading
import time
import redis
import random
import json
# 由于redis在本地同是也没有设置校验等,所以这里使用 默认参数 host='localhost', port=6379
conn = redis.Redis()
# 频道名称
channel_name = '股票实时消息'
def set_change_message(n):
"""创建n条发布信息"""
time.sleep(1)
for i in range(n):
data = {
'time': time.strftime('%Y/%m/%d %M:%I:%S', time.localtime()),
'price': random.randint(0, 999)
}
# 发布消息
conn.publish(channel_name, json.dumps(data))
time.sleep(1)
def get_change_message():
"""订阅大印消息"""
# 创建订阅对向
pubsub = conn.pubsub()
# 订阅股票实时消息
pubsub.subscribe([channel_name])
num = 0
for item in pubsub.listen():
item['channel'] = item.get('channel', '').decode('utf8')
num += 1
if num == 3:
# 退订所有频道,停止监听新的消息
pubsub.unsubscribe()
print(item)
if __name__ == '__main__':
# 启动线程发布5条数据
threading.Thread(target=set_change_message, args=(5,)).start()
get_change_message()
运行结果:
其中第一条与最后一条json数据为在订阅与退订频道时,服务端反馈客户端的消息