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实现一个简单的MySQL类
Jan 07 Python
Python中函数的参数定义和可变参数用法实例分析
Jun 04 Python
详解Python字符串切片
May 20 Python
Python中py文件转换成exe可执行文件的方法
Jun 14 Python
python中比较两个列表的实例方法
Jul 04 Python
python 实现快速生成连续、随机字母列表
Nov 28 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
Dec 17 Python
Python使用docx模块实现刷题功能代码
Feb 13 Python
python实现连连看游戏
Feb 14 Python
Python交互环境下打印和输入函数的实例内容
Feb 16 Python
更新升级python和pip版本后不生效的问题解决
Apr 17 Python
python使用pymysql模块操作MySQL
Jun 16 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正则表达式中修饰符/i, /is, /s, /isU
2014/10/21 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
由浅到深了解JavaScript类
2006/09/08 Javascript
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
jquery 无限级联菜单案例分享
2013/03/26 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
JS采用绝对定位实现回到顶部效果完整实例
2016/06/20 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
2016/08/17 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
JS检测是否可以访问公网服务器功能代码
2017/06/19 Javascript
ztree简介_动力节点Java学院整理
2017/07/19 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
JavaScript引用类型之基本包装类型实例分析【Boolean、Number和String】
2018/08/09 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
vue请求服务器数据后绑定不上的解决方法
2019/10/30 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
Websocket 向指定用户发消息的方法
2020/01/09 Javascript
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
Python文件夹与文件的相关操作(推荐)
2016/07/25 Python
python爬虫之百度API调用方法
2017/06/11 Python
Python实现将HTML转换成doc格式文件的方法示例
2017/11/20 Python
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
在Pycharm中对代码进行注释和缩进的方法详解
2019/01/20 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
python os模块在系统管理中的应用
2020/06/22 Python
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
建筑投标担保书
2014/05/20 职场文书
体育专业自荐书
2014/05/29 职场文书
git中cherry-pick命令的使用教程
2022/06/25 Servers