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

作者:猪笨是念来过倒 时间:2023-08-22 09:34:41 

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

Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能。基于事件的系统中,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

接着我们来看看订阅者:

#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方法。连接好之后,可使用subscribe或psubscribe方法来订阅redis消息。其中subscribe是订阅一个频道,psubscribe可订阅多个频道(这样写的时候,作为参数的频道应该是一个列表)。之后就可以开始监听了。

来源:https://blog.csdn.net/liao392781/article/details/81180999

标签:python,Redis,订阅,发布
0
投稿

猜你喜欢

  • 对numpy中数组转置的求解以及向量内积计算方法

    2023-01-23 16:39:52
  • python3发送邮件需要经过代理服务器的示例代码

    2023-07-27 01:00:44
  • 使用documentElement正确取得当前可见区域的大小

    2024-04-18 09:34:06
  • python包相关知识点之包的导入、相对路径以及绝对路径

    2023-08-11 11:09:46
  • pytorch 数据加载性能对比分析

    2022-04-17 04:22:22
  • VueX浏览器刷新如何实现保存数据

    2024-04-30 10:24:35
  • Python OpenCV简单的绘图函数使用教程

    2023-08-02 23:22:22
  • Python OpenCV实现图片上输出中文

    2021-07-01 15:00:11
  • python使用Tesseract库识别验证

    2023-05-06 12:31:51
  • Oracle时间日期操作方法小结第1/2页

    2010-11-29 19:40:00
  • 关于爬虫和反爬虫的简略方案分享

    2022-08-01 09:54:53
  • Python表示矩阵的方法分析

    2022-06-24 01:31:59
  • 对tensorflow中cifar-10文档的Read操作详解

    2022-08-10 06:59:10
  • 使用python实现baidu hi自动登录的代码

    2021-11-23 14:54:32
  • Python可视化神器pyecharts绘制折线图详情

    2023-01-09 13:57:07
  • 详解tensorflow训练自己的数据集实现CNN图像分类

    2023-02-28 10:47:04
  • python列表生成器迭代器实例解析

    2022-01-14 15:09:20
  • python opencv之SIFT算法示例

    2023-12-27 21:42:33
  • python pandas时序处理相关功能详解

    2023-07-25 12:03:18
  • Python colorama 彩色打印实现代码

    2022-10-03 22:32:28
  • asp之家 网络编程 m.aspxhome.com