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


猜你喜欢
- 导语Hey!下午好,我是木木子,关注我,一起玩游戏吧~微信小游戏很久之前刮起了一股切水果热潮,还记得嘛?我记得纯粹是因为这个游戏家里的孩子依
- 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用。但是如果离
- #!/usr/bin/python # Filename: gen_salt.py impo
- 原因是:It looks like you need to flush stdout periodically (e.g. sys.stdo
- 最近开始学习数据库知识,从mysql下手,下面详细介绍一下安装过程,给小伙伴们一个参考。一、安装 首先,从mysql的中文社区下载,我尝试过
- 由于python2和python3在部分语法上不兼容, 导致有人打趣道:"Python2和Python3是两门语言"对于
- 由于 Ubuntu 中的汉字输入实在是太不友好了,所以装了个 搜狗输入法,好不容易把 搜狗输入法装好,本以为可以开开心心的搞代码了,然而。。
- 前言一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇文章了。这篇笔记主要记录mysql
- M2广义货币供应量:流通于银行体系之外的现金加上企业存款、居民储蓄存款以及其他存款,它包括了一切可能成为现实购买力的货币形式,通常反映的是社
- 项目介绍背景:DC竞赛比赛项目,运用回归模型进 * 价预测。数据介绍:数据主要包括2014年5月至2015年5月美国King County的房
- 前言我们百度搜索一些东西得时候,经常找到文档里面然后就会发现需要充值才能复制!怎么可以不花钱也保存呢?今天就分享给大家一个python获取文
- 学校有一、二、三。。。。至十班。假设每个班上有30名学生。张、李、刘、苏等现有这样的表 student ,字段 class 及name 。其
- 先建立2个测试表,在id列上创建unique约束。 mysql> create table test1(id int,name var
- 公司后端服务使用 java 重构后,很多接口采用了阿里的 dubbo 协议。而 python 是无法直接调用 dubbo 接口的,但可以通过
- 代码如下import matplotlib.pyplot as pltimport numpy as npdef test4(): &nbs
- openCV是基于C++开发的一个强大的图像处理库。在用C++处理图像或视频时通常会使用到openCV这个库,但是这个库并非C++中的标准库
- 1.VUE验证邮箱export const isEmail = (s) => { return /^([a-
- 前言说说外星人那些事儿....你以为的外星人......他们都是乘坐UFO来地球的,长的嗯哼可能比较有特色。也许长这样害!其实可能也或许不长
- 一、避免Firefox 背景图不显示的兼容问题,定义background 属性,先后顺序不能随意变动。background : backgr
- 需要实现的效果选择颜色块或者颜色选择器切换网站主题色,选择主题后保存到本地,下次打开页面是缓存的主题色原理根据ElementUI官网的自定义