博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis 订阅&发布(转载)
阅读量:6342 次
发布时间:2019-06-22

本文共 2700 字,大约阅读时间需要 9 分钟。

方法一:

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)订阅频道 2)监听频道中的消息        pub = self.__conn.pubsub()        # 订阅频道,与publish()中指定的频道一样。消息会发布到这个频道中        pub.subscribe(self.chan_sub)        ret = pub.parse_response()  # [b'subscribe', b'fm86', 1]        print("ret:%s" % ret)        return pub

redis_pub.py: 发布者

from redis_helper import RedisHelper                                obj = RedisHelper()for i in range(5):    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)订阅频道 2)监听频道中的消息        pub = self.__conn.pubsub()        # 订阅某个频道,与publish()中指定的频道一样。消息会发布到这个频道中        pub.subscribe(self.chan_sub)        return pub

redis_pub.py:

from redis_helper import RedisHelperobj = RedisHelper()for i in range(5):    obj.public("hello_%s" % i)

redis_sub.py:

from redis_helper import RedisHelperobj = 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-8 -*-import redis pool = redis.ConnectionPool(host='192.168.0.110', port=6379)r = redis.Redis(connection_pool=pool)r.set('name', 'zhangsan')   #添加print (r.get('name'))   #获取

 

转载于:https://www.cnblogs.com/testzcy/p/10962288.html

你可能感兴趣的文章
jquery 实现的一个 随机云标签网页背景
查看>>
RPC
查看>>
android广播事件处理broadcast receive
查看>>
在eclipse 里面 修改tomcat的配置--Server Locations
查看>>
网站 mvc url 路径 设置 为 *.html 的原因
查看>>
mybatis 开启使用 默认的 二级缓存
查看>>
docker 容器 创建和 使用
查看>>
我的友情链接
查看>>
SQLITE使用指南
查看>>
《java编程思想》学习笔记—访问权限控制
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Red Hat7版本本地仓库yum源的配置
查看>>
CentOS 6.0图解网络安装全过程
查看>>
fluent Python 记录
查看>>
forEach 方法遍历数组:
查看>>
nagios 客户端一键安装
查看>>
[Cocos2D-X] VS2010部分快捷键
查看>>
[CentOS7] - CentOS7防火墙开放端口 -- firewall
查看>>
python模块导入
查看>>