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 18 Python
Collatz 序列、逗号代码、字符图网格实例
Jun 22 Python
Python实现购物车功能的方法分析
Nov 10 Python
pycharm在调试python时执行其他语句的方法
Nov 29 Python
python之cv2与图像的载入、显示和保存实例
Dec 05 Python
ML神器:sklearn的快速使用及入门
Jul 11 Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 Python
python使用paramiko实现ssh的功能详解
Mar 06 Python
python脚本和网页有何区别
Jul 02 Python
django 获取字段最大值,最新的记录操作
Aug 09 Python
Django如何实现防止XSS攻击
Oct 13 Python
python uuid生成唯一id或str的最简单案例
Jan 13 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
DOTA2 6.87版本后新眼位详解攻略
2020/04/20 DOTA
destoon设置自定义搜索的方法
2014/06/21 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
2016/04/20 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
jQuery hover 延时器实现代码
2011/03/12 Javascript
js返回上一页并刷新代码整理
2012/12/21 Javascript
JavaScript数组对象赋值用法实例
2015/08/04 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
node.js express安装及示例网站搭建方法(分享)
2016/08/22 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
div实现自适应高度的textarea实现angular双向绑定
2017/01/08 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
微信小程序如何获取用户手机号
2018/01/26 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
Python线程指南详细介绍
2017/01/05 Python
python中 chr unichr ord函数的实例详解
2017/08/06 Python
对Python3中的input函数详解
2018/04/22 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
Django框架实现逆向解析url的方法
2018/07/04 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
HTML5注册页面示例代码
2014/03/27 HTML / CSS
HTML5图片预览实例分享
2014/06/04 HTML / CSS
动漫设计与制作专业推荐信
2014/07/07 职场文书
学习礼仪心得体会
2014/09/01 职场文书
2014年党建工作总结
2014/11/11 职场文书
2015年路政工作总结
2015/05/22 职场文书
新课程改革心得体会
2016/01/22 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书