python3中redis订阅功能基本使用方法

redis本身支持了publish/subscribe的功能,publish是广播消息,subscribe是订阅消息,使用redis来订阅消息也是一种适合轻量级的方法,我们来看看吧

使用redis-cli登陆redis,然后可以向频道发送消息

PUBLISH [频道名称] [要发送的内容]
#例如
PUBLISH ch "test2"

可以通过subscribe方法来获取指定频道的消息

SUBSCRIBE [频道名称]
#例如
SBUSCRIBE ch

使用python连接redis有三种方式:

①使用库中的Redis类(或StrictRedis类,其实差不多);

②使用ConnectionPool连接池(可保持长连接);

③使用Sentinel类(如果有多个redis做集群时,程序会自己选择一个合适的连接)

订阅方法这里使用的是ConnectionPool连接池的方法来连接的redis,可使用subscribe或psubscribe方法来订阅redis消息。其中subscribe是订阅一个频道,psubscribe可订阅多个频道,之后就可以开始监听频道的消息了

下面来看我的代码,自己写了一个简单的redis连接操作类rds.py文件

#!/usr/bin/python3
#coding:utf-8
import redis

class RedisSubscribler:
    def __init__(self, channel):
        self.connection_pool = redis.ConnectionPool(host="127.0.0.1", port=6379)
        self.conn = redis.Redis(connection_pool=self.connection_pool)
        self.channel = channel

    def pubscrible(self):
        pub = self.conn.pubsub() #打开收音机
        pub.subscribe(self.channel) #接收指定频道,收听多个频道可以使用psubscribe,频道是一个list列表
        pub.listen() #监听频道
        return pub

    def publish(self, msg):
        self.conn.publish(self.channel, msg)
        return True

然后推送消息是redis_pub.py

#!/usr/bin/python3
#coding:utf-8
from rds import RedisSubscribler

subscribler = RedisSubscribler("ch")
txt = input("请输入消息:")
subscribler.publish(txt)

接收消息是redis_sub.py

#!/usr/bin/python3
#coding:utf-8
from rds import RedisSubscribler

subscribler = RedisSubscribler("ch")
redis_sub = subscribler.pubscrible()
while True:
    msg = redis_sub.parse_response() #parse_response是阻塞的,如果想更改为非阻塞需要添加参数parse_response(block=False, timeout=60)
    print("收到订阅消息 {}".format(msg))

接收消息其实就是一个无限循环,当收到消息他会在窗口打印出,默认启动打开了频道以后他会默认输出

收到订阅消息 [b'psubscribe', b'ch', 1]

我们试试脚本

{17EAA802-B9FF-4EDE-B65C-E948F96F3C73}_20190724133509.jpg

然后我们去接收消息的窗口看看

{17C69C63-D022-4B43-926A-DF3F69CE1C03}_20190724133540.jpg

看看已经收到了订阅频道的消息了

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/697.html