订阅者可以订阅一个或多个频道,发布者向一个频道发送消息后,所有订阅这个频道的订阅者都将收到消息,而发布者也将收到一个数值,这个数值是收到消息的订阅者的数量。订阅者只能收到自它开始订阅后发布者所发布的消息,之前发布的消息呢,就不可能收到了。
下面,先给出订阅端的代码
# coding=utf-8
'''
Created on 2015-9-9
@author: kwsy
'''
import redis
pool=redis.ConnectionPool(host='192.168.1.149',port=6379,db=1)
r = redis.StrictRedis(connection_pool=pool)
p = r.pubsub()
p.subscribe('excelFile')
for item in p.listen():
print item
if item['type'] == 'message':
data =item['data']
r.set('s',32)
print data
if item['data']=='over':
break;
p.unsubscribe('spub')
print '取消订阅'
运行时,要注意检查type,一旦listen,就会收到一个消息,但不是发布者的消息,而是系统发来的,内容为{'pattern': None, 'type': 'subscribe', 'channel': 'spub', 'data': 1L},这个的意思是说,你订阅成功了,频道是spub,当前,有一个订阅用户。
再来看发布端的代码
# coding=utf-8
'''
Created on 2015-9-9
@author: Administrator
'''
import redis
pool=redis.ConnectionPool(host='192.168.1.142',port=6379,db=0)
r = redis.StrictRedis(connection_pool=pool)
while True:
input = raw_input("publish:")
if input == 'over':
print '停止发布'
break;
r.publish('spub', input)
rwa_input接收用户输入的数据发布到频道中,订阅端收到后打印数据
这里有一个小情况要指明,实际运行中,如果你输入的是汉子,那么打印出来的可能是乱码,但其实呢,并不是真的编程乱码了,而是当你采用cmd命令窗口运行时,cmd命令窗口有自己的编码格式,所以才会看着乱码,如果用eclipse运行,就不会这样了。
还有一点要注意,如果你使用Redis-cli,也就是redis的客户端订阅了一个频道,那么订阅后,你无法进行除subscribe,unsubscribe,psubscribe,punsubscribe这四个命令意外的其他任何命令。我在订阅代码中放了一行r.set('s',32),执行过程中,这句话是被执行了的,也就是说,当我们用编程语言操作redis时,订阅后,我们仍然可以使用其他命令,因此,刚才所说的有关命令的限制只是针对redis自己的客户端而言。