Python学习-----Redis订阅和发布

推荐两个网页:

https://zh.wikipedia.org/wiki/%E5%8F%91%E5%B8%83/%E8%AE%A2%E9%98%85
http://redis.cn/topics/pubsub.html

一、发布-订阅

在软件架构中,发布-订阅是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者)。而是将发布的消息分为不同的类别,无需了解哪些订阅者(如果有的话)可能存在。同样的,订阅者可以表达对一个或多个类别的兴趣,只接收感兴趣的消息,无需了解哪些发布者(如果有的话)存在。

二、在cmd上运行

1、订阅:       

# 打开cmd
# 运行redis:
        redis-cli
# 订阅一个频道,格式为SUBSCRIBE channel:
# 举个例子:订阅kennyfm这个频道
        SUBSCRIBE kennyfm
        

2、发布

# 打开另一个cmd操作窗口
# 启动redis
        redis-cli
# 在一个频道上发布消息,格式为PUBLISH channel message
# 举个例子:在kennyfm频道上发布消息“this is a test”
    PUBLISH kennyfm "this is a test"
        

三、在ipython上运行

1、订阅

 创建pubsub对象,然后订阅sbscribe,再然后监听listen。注意listen到的信息是字节流
        import redis
        c2 = redis.StrictRedis()
        s1 = c2.pubsub()
        s1.subscribe("kennyfm")
        s1.listen()
        for m in s1.listen():
             print(m)

2、发布

         import redis
         c1 = redis.Redis()
         c1.publish("kennyfm", "kennyfm电台开播了")

四、Python代码实现

# 发布
# -*- coding:utf-8 -*-
# redis_pub.py
# Redis demo
# kenny

import redis

client = redis.Redis()
channels = ['jay', 'she', 'mj']


def main():
    print("可以发布到任意一个频道")
    for i in channels:
        print(i)
    ch = input("输入发送的频道>>>")
    while True:
        msg = input("输入发送的信息(q: 退出)>>>")
        if msg == 'q':
            break
        else:
            client.publish(ch, msg)

        
if __name__ == "__main__":
    main()
# 订阅
# -*- coding:utf-8 -*-
# redis_sub.py
# Redis demo
# kenny

import redis

client = redis.StrictRedis()
channels = ['jay', 'she', 'mj']

# 得到pubsub对象
# 订阅频道
# listen监听


def subscribe():
    s1 = client.pubsub()
    s1.subscribe(channels)

    s2 = client.pubsub()
    s2.subscribe('she')

    s3 = client.pubsub()
    s3.subscribe(channels[:2])

    show_msg(s1, 's1')
    show_msg(s2, 's2')
    show_msg(s3, 's3')


def show_msg(sub_obj, sub_name):
    for msg in sub_obj.listen():
        if msg["type"] == "message":
            print(f"{sub_name} get message {msg['data'].decode()} from {msg['channel']}")


def main():
    subscribe()
if __name__ == "__main__":
    main()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值