|
1 Publish / Subscribe 发布/订阅 Redis 的 SUBSCRIBE 命令可以让客户端订阅任意数量的频道,每当有新信息发送到被订阅的频道时, 信息就会被发送给所有订阅指定频道的客户端。
作为例子, 下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:
当有新消息通过 PUBLISH 命令发送给频道channel1 时, 这个消息就会被发送给订阅它的三个客户端:
上面描述了订阅与发布的关系。
2 example 实例演示发布端:
1
2
3
4
5
6
7
8
9
10
11
12
13
| # -*- coding: UTF-8 -*-
import redis
redis_client = redis.StrictRedis(host='localhost', port=6379, db=0)
# 建立PubSub对象订阅通道和侦听新消息
p = redis_client.pubsub()
# 订阅两个频道,分别是my-first-channel,和my-second-channel
p.subscribe('my-first-channel', 'my-second-channel')
# 使用publish推送消息,注意是StrictRedis类的方法
redis_client.publish('my-first-channel', 'nihvdfdao')
|
订阅端A:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # -*- coding: UTF-8 -*-
import redis
redis_server = redis.StrictRedis(host='localhost', port=6379, db=0)
# 建立PubSub对象订阅通道和侦听新消息
p = redis_server.pubsub()
# 订阅两个频道,分别是my-first-channel,和my-second-channel
p.subscribe('my-first-channel', 'my-second-channel')
# 使用p.listen()方法监听频道
for item in p.listen():
# 如果订阅的频道存储的项目是'message'
if item['type'] == 'message':
# 则打印这个项目
print item['data']
|
订阅端B:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # -*- coding: UTF-8 -*-
import redis
redis_server = redis.StrictRedis(host='localhost', port=6379, db=0)
# 建立PubSub对象订阅通道和侦听新消息
p = redis_server.pubsub()
# 订阅两个频道,分别是my-first-channel,和my-second-channel
p.subscribe('my-first-channel', 'my-second-channel')
whileTrue:
data =msg_queue.parse_response()
print pickle.loads(data[2])
|
|
|
|