Python操作Redis之订阅与发布

订阅者可以订阅一个或多个频道,发布者向一个频道发送消息后,所有订阅这个频道的订阅者都将收到消息,而发布者也将收到一个数值,这个数值是收到消息的订阅者的数量。订阅者只能收到自它开始订阅后发布者所发布的消息,之前发布的消息呢,就不可能收到了。

下面,先给出订阅端的代码

# 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自己的客户端而言。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值