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','')

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

#!/usr/bin/env python
# -*- coding:utf-8 -*- import redis class 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

最新文章

  1. touchstart,touchmove,touchend事件 写法
  2. 实现Div拖拽
  3. Centos6---Fail2ban
  4. P4factory 运行结果展示 basic_routing 以及 ./run_all_tests 的运行结果
  5. HTTP常见错误 400/401/403/404/500及更多
  6. 让JAVA代码跑得更快
  7. The Greate Wall 相关网络知识(一)域名劫持
  8. 初步掌握HDFS的架构及原理
  9. CLOUDSTACK接管VCENTER,意外频出,但最终搞定
  10. Datagridview控件实现分页功能
  11. 如何在Android Studio上使用Github
  12. 浅谈URL跳转与Webview安全
  13. Node.js微服务实践(一)
  14. 企业信息化-Excel快速生成系统
  15. nginx [alert] 12339#0: 1024 worker_connections are not enough
  16. note_The Top Risks of Requirements Engineering
  17. MVC架构在Asp.net中的应用和实现
  18. github总结(2)--怎样在github上面创建新的分支
  19. 【代码审计】大米CMS_V5.5.3 任意文件删除及代码执行漏洞分析
  20. CSS 基础 优先级 选择器 继承

热门文章

  1. 利用eChart绘制网页图表
  2. activiti自己定义流程之Spring整合activiti-modeler实例(一):环境搭建
  3. <图形图像,动画,多媒体> 读书笔记 --- AirPlay
  4. U3D正播反播动画剪辑
  5. 基于PCIe的高速接口设计
  6. maven(5)------eclipse下maven常用命令打包
  7. 在Hive中执行DDL之类的SQL语句时遇到的一个问题
  8. LeetCode: Rotate Image 解题报告
  9. 深入浅出c++之---this指针
  10. dvwa 源码分析(二) --- dvwaPage.inc.php分析