PUBLISH 、 SUBSCRIBE 等命令实现了订阅与发布模式, 这个功能提供两种信息机制, 分别是订阅/发布到频道和订阅/发布到模式。
先介绍一下Redis的pub/sub功能:Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能。基于事件的系统中,Pub/Sub是目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供大规模系统所要求的松散耦合的交互模式:订阅者(如客户端)以事件订阅的方式表达出它有兴趣接收的一个事件或一类事件;发布者(如服务器)可将订阅者感兴趣的事件随时通知相关订阅者。
一、单节点redis发布
发布者:
import redis
import json
rc = redis.StrictRedis(host='127.0.0.1', port='6379', db=6, password='123456')
data = {"status": 1, "msg": "success"}
rc.publish("ZH", json.dumps(data))
备注:发布的消息是字符串,所以需要dumps一下
订阅者:注意监听数据的 type
import redis, json
rc = redis.StrictRedis(host='127.0.0.1', port='6379', db=6, password='123456')
ps = rc.pubsub()
ps.subscribe('ZH') # ZH
for item in ps.listen(): # 监听状态:有消息发布了就拿过来
print(item)
if item.get("type") == "message":
data = item.get("data")
data = json.loads(data)
print(data)
以上代码即可简单实现redis的发布和订阅功能。
二、redis集群
发布者:
from rediscluster import StrictRedisCluster
import json
redis_nodes = [{"host": "127.0.0.1", "port": 6379},
{"host": "127.0.0.1", "port": 6380},
{"host": "127.0.0.1", "port": 6381}
]
redisconn = StrictRedisCluster(startup_nodes=redis_nodes, decode_responses=True, password="123456")
data = {"status": 1, "msg": "success"}
redisconn.pubsub("ZH", json.dumps(data))
订阅者:
from rediscluster import StrictRedisCluster
redis_nodes = [{'host': '127.0.0.1', 'port': 6379},
{'host': '127.0.0.1', 'port': 6380},
{'host': '127.0.0.1', 'port': 6381}
]
redisconn = StrictRedisCluster(startup_nodes=redis_nodes, decode_responses=True, password="123456")
pub = redisconn.publish()
pub.subscribe("ZH")
for item in pub.listen():
print(item)
if item.get("type") == "message":
data = item.get("data")
data = json.loads(data)
print(data)
备注:集群发布需要的包如下,版本可自行选择
redis==2.10.6
redis-py-cluster==1.3.6
redis安装机票:入口
如果想深入了解redis的发布和订阅请参考官方文档:
redis实现发布和订阅
redis