python中sub-pub机制怎么实现Redis的订阅与发布

先介绍一下redis的pub/sub功能:

The Pub/Sub feature, which stands for Publish and Subscribe, refers to the functionality of publishing and subscribing.。基于事件的系统中,Pub/Sub是目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供大规模系统所要求的松散耦合的交互模式:订阅者(如客户端)以事件订阅的方式表达出它有兴趣接收的一个事件或一类事件;发布者(如服务器)可将订阅者感兴趣的事件随时通知相关订阅者。

通俗来讲,就是说我sub端(订阅者)一直监听着,一旦pub端(发布者)发布了消息,那么我就接收过来,举个例子,先是发布者:

#coding:utf-8
import time
import redis

number_list = ['
300033'
, '
300032'
, '
300031'
, '
300030'
]
signal = ['
1'
, '
-1'
, '
1'
, '
-1'
]

rc = redis.StrictRedis(host='
***'
, port='
6379'
, db=3, password='
********'
)
for i in range(len(number_list)):
value_new = str(number_list[i]) + '
'
+ str(signal[i])
rc.publish("
liao"
, value_new) #发布消息到liao

Docker如何安装MySql8并远程访问详细教程带你轻松解决

接着我们来看看订阅者:

#coding:utf-8
import time
import redis

rc = redis.StrictRedis(host='
****'
, port='
6379'
, db=3, password='
******'
)
ps = rc.pubsub()
ps.subscribe('
liao'
) #从liao订阅消息
for item in ps.listen(): #监听状态:有消息发布了就拿过来
if item['
type'
] == '
message'
:
print item['
channel'
]
print item['
data'
]

关于数据结构,也就是item,是类似于:{'
pattern'
: None, '
type'
: '
message'
, '
channel'
: '
liao'
, '
data'
: '
300033 1'
}这样的,所以可以通过channel来判断这个消息是属于哪一个队列里的。(运行程序的时候,先运行订阅者,在运行发布者程序)

总结,要点有两个:

  • 一是连接方式。使用python连接redis有三种方式:①使用库中的Redis类(或StrictRedis类,其实差不多);②使用ConnectionPool连接池(可保持长连接);③使用Sentinel类(如果有多个redis做集群时,程序会自己选择一个合适的连接)。

  • 二是订阅方法。这里使用的是StrictRedis类中的pubsub方法。订阅redis消息的方式是使用subscribe或psubscribe方法,在连接成功后开始使用。其中subscribe是订阅一个频道,psubscribe可订阅多个频道(这样写的时候,作为参数的频道应该是一个列表)。之后就可以开始监听了。



Docker是一个优秀的容器技术,它可以为开发者提供一个便捷的环境,MySql8则是一个性能出色的数据库,两者的组合可以使得开发者更加方便高效地工作。那如何在Docker中安装MySql8并进行远程访问呢?
第一步:创建一个MySql8容器
首先,我们需要在Docker中创建一个容器,也就是MySql8的运行环境。我们可以使用以下命令:
docker run --name mysql8 -e MYSQL_ROOT_PASSWORD=your_password -p 3306:3306 -d mysql:8
其中,--name mysql8指定了容器的名字为mysql8,-e MYSQL_ROOT_PASSWORD=your_password指定了root账户的密码为your_password,-p 3306:3306指定了容器端口和主机端口的映射,-d mysql:8指定了使用的镜像为mysql:8。
第二步:设置远程访问
默认情况下,MySql8只能在本地访问,无法进行远程访问。我们需要在容器中进行一些配置来开启这个功能。
首先,我们需要登录到容器中。使用以下命令:
docker exec -it mysql8 bash
然后,我们需要进入MySQL的CLI,使用以下命令:
mysql -u root -p
输入之前设置的密码即可进入。
接下来,我们需要授权远程访问。使用以下命令:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;
其中,your_password需要替换为你自己设置的密码。
最后,我们需要重启MySQL服务,使用以下命令:
service mysql restart
第三步:远程连接MySql8
现在,我们就可以进行远程访问了。我们可以使用任意的MySQL客户端工具,输入以下参数即可:
主机:MySql8容器所在的主机IP地址
端口:3306
用户名:root
密码:你之前设置的密码
至此,我们已经成功安装并配置了MySql8容器,以及开启了远程访问功能。通过Docker,我们可以轻松制作MySQL8的开发环境,并方便地进行维护和追踪。