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读取TXT每行,并存到LIST中的方法
Oct 26 Python
python ddt数据驱动最简实例代码
Feb 22 Python
python文件选择对话框的操作方法
Jun 27 Python
Python使用Pandas库实现MySQL数据库的读写
Jul 06 Python
Django ImageFiled上传照片并显示的方法
Jul 28 Python
wxPython色环电阻计算器
Nov 18 Python
Python动态导入模块和反射机制详解
Feb 18 Python
用python介绍4种常用的单链表翻转的方法小结
Feb 24 Python
关于Python解包知识点总结
May 05 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
May 13 Python
利用Python实现Excel的文件间的数据匹配功能
Jun 16 Python
python 实现音频叠加的示例
Oct 29 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面试题附答案
2009/01/07 PHP
php递归创建目录的方法
2015/02/02 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
对JavaScript中this指针的新理解分享
2015/01/31 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
2017/03/08 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
angularJs-$http实现百度搜索时的动态下拉框示例
2018/02/27 Javascript
vue移动端实现红包雨效果
2020/06/23 Javascript
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
react+antd 递归实现树状目录操作
2020/11/02 Javascript
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
Python实现从百度API获取天气的方法
2015/03/11 Python
以一个投票程序的实例来讲解Python的Django框架使用
2016/02/18 Python
Python中easy_install 和 pip 的安装及使用
2017/06/05 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
Python turtle绘画象棋棋盘
2019/08/21 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
2020/01/05 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
2020/02/25 Python
使用SQLAlchemy操作数据库表过程解析
2020/06/10 Python
python绘制趋势图的示例
2020/09/17 Python
Django框架请求生命周期实现原理
2020/11/13 Python
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
让文件路径提取变得更简单的Python Path库
2021/05/27 Python
python超详细实现完整学生成绩管理系统
2022/03/17 Python