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]
我们试试脚本
然后我们去接收消息的窗口看看
看看已经收到了订阅频道的消息了