redis 订阅&发布(转载)
https://segmentfault.com/a/1190000016898228?utm_source=coffeephp.com
方法一:
redis_helper.py: 封装发布订阅方法
import redis
class RedisHelper(object):
def __init__(self):
self.__conn = redis.Redis(host="localhost")
# 订阅频道
self.chan_sub = "fm104.5"
def public(self, msg):
"""
在指定频道上发布消息
:param msg:
:return:
"""
# publish(): 在指定频道上发布消息,返回订阅者的数量
self.__conn.publish(self.chan_sub, msg)
return True
def subscribe(self):
# 返回发布订阅对象,通过这个对象你能1)订阅频道 )监听频道中的消息
pub = self.__conn.pubsub()
# 订阅频道,与publish()中指定的频道一样。消息会发布到这个频道中
pub.subscribe(self.chan_sub)
ret = pub.parse_response() # [b'subscribe', b'fm86', ]
print("ret:%s" % ret)
return pub
redis_pub.py: 发布者
from redis_helper import RedisHelper obj = RedisHelper()
for i in range():
obj.public("hello_%s" % i)
redis_sub.py: 订阅者
from redis_helper import RedisHelper obj = RedisHelper()
redis_sub = obj.subscribe()
while True:
msg = redis_sub.parse_response()
print(msg)
方法二:
redis_helper.py: 封装发布订阅方法
import redis
class RedisHelper(object):
def __init__(self):
self.__conn = redis.Redis(host="localhost")
# 频道名称
self.chan_sub = "orders"
def public(self, msg):
"""
在指定频道上发布消息
:param msg:
:return:
"""
# publish(): 在指定频道上发布消息,返回订阅者的数量
self.__conn.publish(self.chan_sub, msg)
return True
def subscribe(self):
# 返回发布订阅对象,通过这个对象你能1)订阅频道 )监听频道中的消息
pub = self.__conn.pubsub()
# 订阅某个频道,与publish()中指定的频道一样。消息会发布到这个频道中
pub.subscribe(self.chan_sub)
return pub
redis_pub.py:
from redis_helper import RedisHelper obj = RedisHelper()
for i in range():
obj.public("hello_%s" % i)
redis_sub.py:
from redis_helper import RedisHelper obj = RedisHelper()
redis_sub = obj.subscribe()
while True:
# listen()函数封装了parse_response()函数
msg = redis_sub.listen()
for i in msg:
if i["type"] == "message":
print(str(i["channel"], encoding="utf-8") + ":" + str(i["data"], encoding="utf-8"))
elif i["type"] == "subscribe":
print(str(i["channel"], encoding="utf-8"))
以上两种方式的不同之处在于,方式一使用发布订阅对象的parse_response()方法获取订阅信息,方式二使用发布订阅对象的listen()方法获取订阅信息。listen()方法是对parse_response()方法的封装,加入了阻塞,并将parse_response()返回的结果进行了处理,使结果更加简单。
==================连接池
#!/usr/bin/env python
# -*- coding:utf- -*-
import redis pool = redis.ConnectionPool(host='192.168.0.110', port=)
r = redis.Redis(connection_pool=pool)
r.set('name', 'zhangsan') #添加
print (r.get('name')) #获取
redis 订阅&发布(转载)的更多相关文章
- ServiceStack.Redis订阅发布服务的调用(Z)
1.Redis订阅发布介绍Redis订阅发布是一种消息通信模式:发布者(publisher)发送消息,订阅者(Subscriber)接受消息.类似于设计模式中的观察者模式.发布者和订阅者之间使用频 ...
- ServiceStack.Redis订阅发布服务的调用
1.Redis订阅发布介绍 Redis订阅发布是一种消息通信模式:发布者(publisher)发送消息,订阅者(Subscriber)接受消息.类似于设计模式中的观察者模式. 发布者和订阅者之间使用频 ...
- Redis 订阅发布 - Jedis实现
Redis 订阅发布 - Jedis实现 我想到使用Redis的订阅发布模式是用来解决推送问题的-. 对于概念性的叙述,多多少少还是要提一下的: 什么是Redis发布订阅?Redis发布订阅是一种 ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用
责任链模式的具体应用 1.业务场景 生产车间中使用的条码扫描,往往一把扫描枪需要扫描不同的条码来处理不同的业务逻辑,比如,扫描投入料工位条码.扫描投入料条码.扫描产出工装条码等,每种类型的条码位数 ...
- 2016022611 - redis订阅发布命令集合
redis消息订阅发布命令 参考地址:http://www.yiibai.com/redis/redis_pub_sub.html 消息发送者发送消息,通过redis的channal,消息接收者获取消 ...
- python 实现redis订阅发布功能
redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...
- redis订阅发布简单实现
适用场景 业务流程遇到大量异步操作,并且业务不是很复杂 业务的健壮型要求不高 对即时场景要求不高 原理介绍 redis官网文档:https://redis.io/topics/notification ...
- redis订阅发布
一.简介 Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订 ...
随机推荐
- nginx 四个主要组成部分
1.Nginx 二进制可执行文件 由各模块源码编译出的一个文件 2.Nginx.conf 配置文件 控制nginx如何运行 3.access.log 访问日志 记录http请求信息 4.error.l ...
- Asp.Net Core Identity 完成注册登录
Identity是Asp.Net Core全新的一个用户管理系统,它是一个完善的全面的庞大的框架,提供的功能有: 创建.查询.更改.删除账户信息 验证和授权 密码重置 双重身份认证 支持扩展登录,如微 ...
- subplot()一个窗口画多个图
import matplotlib.pyplot as plt plt.subplot(m,n,p) m,n表示一个窗口上显示m行n列 p表示正在处理第p个区域的部分(区域编号从左到右,从上到下) f ...
- Java面试 - 在Java中, 既然构造方法是一个方法,那么为什么不使用void 定义呢?
Java程序编译器是根据代码结构来进行编译处理的,执行的时候也是根据代码结构来处理的. 如果在构造方法上使用void,那么此结构就会与普通方法的结构相同,这样编译器会认为此方法是一个 普通方法,而普通 ...
- Vmware中安装的Ubuntu不能全屏问题解决
现在有了开源的vmtoll可以下载:open-vm-tools 先安装open-vm-tools:sudo apt-get install open-vm-tools 然后安装:(不知道具体 ...
- vue-cli开发-搭建项目(一)
前言 vue-cli是Vue官方提供的命令行工具,可用于快速搭建大型单页应用.集成了webpack环境及主要依赖,对于项目的搭建.打包.维护管理等都非常方便快捷.建议先熟悉 Vue 本身之后再研究 C ...
- sql复合索引使用和注意事项
1.定义: 单一索引: 单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上; 复合索引: 复合索引也叫组合索引: 用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引). 复合索引在 ...
- mq 探究
一 mq简介(message queue) 消息队列技术是分布式应用间交互信息的一种技术. 消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走 通过消息队列,应用程序可独立地执行-它们不 ...
- Word 查找替换高级玩法系列之 -- 段首批量添加字符
打开「查找和替换」输入框,按照下图操作: 更多查找替换高级玩法,参看:Word查找替换高级玩法系列 -- 目录篇 未完 ...... 点击访问原文(进入后根据右侧标签,快速定位到本文)
- MySQL的sql语言分类DML、DQL、DDL、DCL
SQL语言一共分为4大类:数据定义语言DDL,数据操纵语言DML,数据查询语言DQL,数据控制语言DCL 1.数据定义语言DDL(Data Definition Language) 对象: 数据库和表 ...