博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三百零一节,python操作redis缓存-管道、发布订阅
阅读量:6691 次
发布时间:2019-06-25

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

python操作redis缓存-管道、发布订阅

 

一、管道

redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。

pipeline(transaction=True)transaction=True将多个操作组合成原子性操作,也就是一个整体,有一个操作失败,意味着全部失败,数据回滚

pipe.execute()执行原子性操作

#!/usr/bin/env python# -*- coding:utf-8 -*-import redis                #导入操作redis模块pool = redis.ConnectionPool(host='127.0.0.1', port=6379)  #配置连接池连接信息r = redis.Redis(connection_pool=pool)                           #连接连接池pipe = r.pipeline(transaction=True)  #将多个操作组合成原子性操作,也就是一个整体,有一个操作失败,意味着全部失败,数据回滚pipe.set('name', 'alex')pipe.set('role', 'sb')pipe.execute()                       #执行原子性操作

 

 

二、发布订阅 

也就是,多个订阅端循环监听着Redis里的一个name名称通道,当这个通道里有内容时立即获取到,发布端向这个name名称通道里写入类容提供订阅者获取

订阅端

pubsub()创建订阅对象
subscribe('fm104')创建订阅通道,也就是redis里的一个name名称
parse_response()循环监听通道里的类容
发布端
publish('fm104','12')发布内容

订阅端

#!/usr/bin/env python# -*- coding:utf-8 -*-"""订阅者"""import redis     #导入缓存模块r = redis.Redis(host='127.0.0.1', port=6379)     #配置连接池连接信息pub = r.pubsub()                                 #创建订阅对象pub.subscribe('fm104')                           #创建订阅通道,也就是redis里的一个name名称while True:    msg = pub.parse_response()                   #循环监听通道里的类容    print(msg)                                   #通道里有内容就打印

发布端

#!/usr/bin/env python# -*- coding:utf-8 -*-"""发布者"""import redis     #导入缓存模块r = redis.Redis(host='127.0.0.1', port=6379)     #配置连接池连接信息r.publish('fm104','12')

 

以后可以封装成一个模块,如:

#!/usr/bin/env python# -*- coding:utf-8 -*-import redisclass RedisHelper:    def __init__(self):        self.__conn = redis.Redis(host='10.211.55.4')        self.chan_sub = 'fm104.5'        self.chan_pub = 'fm104.5'    def public(self, msg):        #发布方法        self.__conn.publish(self.chan_pub, msg)        return True    def subscribe(self):          #订阅方法        pub = self.__conn.pubsub()        pub.subscribe(self.chan_sub)        pub.parse_response()        return pub

 

转载地址:http://obkoo.baihongyu.com/

你可能感兴趣的文章
windows手动启动mysql mysql.bat
查看>>
TCC型分布式事务原理和实现之:原理介绍
查看>>
配置outlook收发domino邮件
查看>>
用普通计算机假设基于liunx系统的NAS部署FineReport决策系统
查看>>
[精讲-5]BitLocker
查看>>
TensorFlow Serving在Kubernetes中的实践
查看>>
Python函数与类参数默认值陷阱
查看>>
SQLite数据类型
查看>>
CentOS7的SSH免秘钥认证
查看>>
jdbc连接数据库一般思路(MySql为例)
查看>>
SwaggerUI ASP.Net WebAPI2
查看>>
烂泥: KVM虚拟机Linux系统增加硬盘
查看>>
[Gerrit]Gerrit的安装及用户注册
查看>>
Error:Could not load SWT library
查看>>
ofo摩拜合并 是竞争格局的终点吗
查看>>
思科 核心4506 X4516升级CF卡
查看>>
gitlab bitnami 安装
查看>>
dns本地缓存性能压力测试
查看>>
python之网络编程
查看>>
让select查询结果额外增加自增的伪序号列
查看>>