Python redis操作实例分析【连接、管道、发布和订阅等】


Posted in Python onMay 16, 2019

本文实例讲述了Python redis操作。分享给大家供大家参考,具体如下:

一、redis

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便,Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。从盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。

二、python操作redis

1、连接方式

redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import redis
r = redis.Redis(host='192.168.0.110', port=6379,db=0)
r.set('name', 'zhangsan')  #添加
print (r.get('name'))  #获取

2、连接池

redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。

#!/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'))  #获取

3、操作

4、管道

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

#!/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)
pipe = r.pipeline(transaction=True)
r.set('name', 'zhangsan')
r.set('name', 'lisi')
pipe.execute()

5、发布和订阅

首先定义一个RedisHelper类,连接Redis,定义频道为monitor,定义发布(publish)及订阅(subscribe)方法。

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import redis
class RedisHelper(object):
  def __init__(self):
    self.__conn = redis.Redis(host='192.168.0.110',port=6379)#连接Redis
    self.channel = 'monitor' #定义名称
  def publish(self,msg):#定义发布方法
    self.__conn.publish(self.channel,msg)
    return True
  def subscribe(self):#定义订阅方法
    pub = self.__conn.pubsub()
    pub.subscribe(self.channel)
    pub.parse_response()
    return pub

发布者

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#发布
from RedisHelper import RedisHelper
obj = RedisHelper()
obj.publish('hello')#发布

订阅者

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#订阅
from RedisHelper import RedisHelper
obj = RedisHelper()
redis_sub = obj.subscribe()#调用订阅方法
while True:
  msg= redis_sub.parse_response()
  print (msg)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
使用Python编写简单的画图板程序的示例教程
Dec 08 Python
将TensorFlow的模型网络导出为单个文件的方法
Apr 23 Python
Python wxPython库使用wx.ListBox创建列表框示例
Sep 03 Python
python生成多个只含0,1元素的随机数组或列表的实例
Nov 12 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
python实现复制大量文件功能
Aug 31 Python
Python实现AES加密,解密的两种方法
Oct 03 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
Nov 02 Python
python 生成正态分布数据,并绘图和解析
Dec 21 Python
Python 获取异常(Exception)信息的几种方法
Dec 29 Python
解决Python import .pyd 可能遇到路径的问题
Mar 04 Python
使用Python脚本对GiteePages进行一键部署的使用说明
May 27 Python
Python操作redis实例小结【String、Hash、List、Set等】
May 16 #Python
Python 实现数据结构中的的栈队列
May 16 #Python
Python 一键制作微信好友图片墙的方法
May 16 #Python
Python实现京东秒杀功能代码
May 16 #Python
使用Python进行体育竞技分析(预测球队成绩)
May 16 #Python
Python异步操作MySQL示例【使用aiomysql】
May 16 #Python
Django 表单模型选择框如何使用分组
May 16 #Python
You might like
PHP性能优化 产生高度优化代码
2011/07/22 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
PHP实现获取文件后缀名的几种常用方法
2015/08/08 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
2016/03/29 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
JavaScript实现Sleep函数的代码
2007/03/04 Javascript
javascript新手语法小结
2008/06/15 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
2018/10/22 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
Python 正则表达式入门(初级篇)
2016/12/07 Python
Python环境搭建之OpenCV的步骤方法
2017/10/20 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
2020/04/17 Python
Jupyter Notebook的连接密码 token查询方式
2020/04/21 Python
Python xlwt模块使用代码实例
2020/06/10 Python
python从Oracle读取数据生成图表
2020/10/14 Python
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
澳大利亚巧克力花束和礼品网站:Tastebuds
2019/03/15 全球购物
Linux如何压缩可执行文件
2014/03/27 面试题
体育专业个人的求职信范文
2013/09/21 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
使用Redis实现实时排行榜功能
2021/07/02 Redis
JavaScript中MutationObServer监听DOM元素详情
2021/11/27 Javascript