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文件操作类操作实例详解
Jul 11 Python
Python中join和split用法实例
Apr 14 Python
python 多线程实现检测服务器在线情况
Nov 25 Python
对python中大文件的导入与导出方法详解
Dec 28 Python
python实现银联支付和支付宝支付接入
May 07 Python
python和mysql交互操作实例详解【基于pymysql库】
Jun 04 Python
详解python中自定义超时异常的几种方法
Jul 29 Python
Django接收post前端返回的json格式数据代码实现
Jul 31 Python
如何爬取通过ajax加载数据的网站
Aug 15 Python
django多种支付、并发订单处理实例代码
Dec 13 Python
Python日志处理模块logging用法解析
May 19 Python
python list等分并从等分的子集中随机选取一个数
Nov 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学习资源和链接.
2006/12/05 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
javascript工具库代码
2012/03/29 Javascript
利用jQuery的deferred对象实现异步按顺序加载JS文件
2013/03/17 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
JavaScript中的Primitive对象封装介绍
2014/12/31 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
2015/06/08 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
for循环 + setTimeout 结合一些示例(前端面试题)
2017/08/30 Javascript
加载 vue 远程代码的组件实例详解
2017/11/20 Javascript
angular第三方包开发整理(小结)
2018/04/19 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
python基础教程之序列详解
2014/08/29 Python
Python3字符串学习教程
2015/08/20 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
python实现分页效果
2017/10/25 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
Django 中自定义 Admin 样式与功能的实现方法
2019/07/04 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
2014年会策划方案
2014/05/11 职场文书
个人作风建设自查报告
2014/10/22 职场文书
群众路线学习笔记范文
2014/11/06 职场文书
爱心捐款感谢信
2015/01/20 职场文书
2015年班干部工作总结
2015/04/29 职场文书
企业催款函范本
2015/06/24 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
Redis数据结构之链表与字典的使用
2021/05/11 Redis
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫