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 订阅&发布(转载)的更多相关文章

  1. ServiceStack.Redis订阅发布服务的调用(Z)

      1.Redis订阅发布介绍Redis订阅发布是一种消息通信模式:发布者(publisher)发送消息,订阅者(Subscriber)接受消息.类似于设计模式中的观察者模式.发布者和订阅者之间使用频 ...

  2. ServiceStack.Redis订阅发布服务的调用

    1.Redis订阅发布介绍 Redis订阅发布是一种消息通信模式:发布者(publisher)发送消息,订阅者(Subscriber)接受消息.类似于设计模式中的观察者模式. 发布者和订阅者之间使用频 ...

  3. Redis 订阅发布 - Jedis实现

    Redis 订阅发布 - Jedis实现 我想到使用Redis的订阅发布模式是用来解决推送问题的-. 对于概念性的叙述,多多少少还是要提一下的: ​ 什么是Redis发布订阅?Redis发布订阅是一种 ...

  4. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  5. 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用

    责任链模式的具体应用   1.业务场景 生产车间中使用的条码扫描,往往一把扫描枪需要扫描不同的条码来处理不同的业务逻辑,比如,扫描投入料工位条码.扫描投入料条码.扫描产出工装条码等,每种类型的条码位数 ...

  6. 2016022611 - redis订阅发布命令集合

    redis消息订阅发布命令 参考地址:http://www.yiibai.com/redis/redis_pub_sub.html 消息发送者发送消息,通过redis的channal,消息接收者获取消 ...

  7. python 实现redis订阅发布功能

    redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...

  8. redis订阅发布简单实现

    适用场景 业务流程遇到大量异步操作,并且业务不是很复杂 业务的健壮型要求不高 对即时场景要求不高 原理介绍 redis官网文档:https://redis.io/topics/notification ...

  9. redis订阅发布

    一.简介 Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订 ...

随机推荐

  1. nginx location 优先级

    location 顺序/优先级:     location = > location 完整路径 > location ^~ 路径 > location ~,~* 正则顺序 > ...

  2. yum 安装 epel-release 后出现yum doesn’t have enough cached data to continue错误的解决方案

    工作中需要部署docker,由于是内网环境,无法直接访问外网,于是考虑在内网搭建yum私有源进行安装,内网服务器操作系统为centos 7.4.根据docker的官方安装方式进行安装时,要求安装 ep ...

  3. [转帖]详解Linux系统inode原理--硬链接、软链接、innodb大小和划分等

    详解Linux系统inode原理--硬链接.软链接.innodb大小和划分等 原创 波波说运维 2019-07-17 00:03:00 https://www.toutiao.com/i6713116 ...

  4. 怎么让桌面存到d盘

    1.找到桌面文件夹. (C:\Users\Administrator) [C盘],[用户].[“”系统账号“(如Administrator)文件夹],[桌面] 2.打开桌面文件夹的属性. 查看位置,修 ...

  5. Python——方法

    方法是类或者对象行为特征的抽象,方法其实也是函数,它的定义方式.调用方式与函数都很相似. 一.类调用实例方法 先来看一段代码: # 定义全局空间test函数 def test(): print ('全 ...

  6. gin PostForm 方法不起作用

    情景: 在httpie post 下,在 axios post下,总的来说,就是在form-data下只有c.Bind()会有用 如果一定要用c.PostForm() headers必须为x-www- ...

  7. 【百度之星2019】Strassen

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6719 在本题中,我们只有两种方法计算两个的矩阵的乘积,第一种为定义法,需要次乘法和次加法.第二种为 ...

  8. 解决GitHub下载速度缓慢的问题

    随着微软大大宣布GitHub针对个人用户的仓库免费,相信每位开发者都感受到了"真香". 然而因为一些众所周知的原因,国内访问GitHub总会遇到下载速度缓慢.链接意外终止的情况. ...

  9. tiny-Spring【1】

    Spring框架的两大特性:IOC.AOP 1,IOC特性 IOC:IOC,另外一种说法叫DI(Dependency Injection),即依赖注入.它并不是一种技术实现,而是一种设计思想. 在任何 ...

  10. C# 整型数和浮点型数的进制转换

    1.十进制转二进制 /// <summary> /// 十进制转二进制 /// </summary> public class Convert10To2 { /// <s ...