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和shell变量互相传递的几种方法
Nov 20 Python
从零学python系列之数据处理编程实例(一)
May 22 Python
Zabbix实现微信报警功能
Oct 09 Python
python3实现跳一跳点击跳跃
Jan 08 Python
python3 实现对图片进行局部切割的方法
Dec 05 Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 Python
python如何保证输入键入数字的方法
Aug 23 Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 Python
python实现画循环圆
Nov 23 Python
Python基于Webhook实现github自动化部署
Nov 28 Python
OpenCV-Python实现怀旧滤镜与连环画滤镜
Jun 09 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
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
php学习之运算符相关概念
2011/06/09 PHP
使用PHP生成二维码的两种方法(带logo图像)
2014/03/14 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
PHP 实现文件压缩解压操作的方法
2019/06/14 PHP
Ext JS Grid在IE6 下宽度的问题解决方法
2009/02/15 Javascript
jQuery实现类似淘宝购物车全选状态示例
2013/06/26 Javascript
jquery 实现密码框的显示与隐藏示例代码
2013/09/18 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
Nodejs抓取html页面内容(推荐)
2016/08/11 NodeJs
借助node实战JSONP跨域实例
2017/03/30 Javascript
H5图片压缩与上传实例
2017/04/21 Javascript
深入浅析angular和vue还有jquery的区别
2018/08/13 jQuery
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
Ant Design moment对象和字符串之间的相互转化教程
2020/10/27 Javascript
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[42:32]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.27
2020/12/01 DOTA
python使用opencv对图像mask处理的方法
2019/07/05 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
2019/08/06 Python
python进程间通信Queue工作过程详解
2019/11/01 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
编程实现当输入某产品代码则打印出该产品记录的功能
2014/05/03 面试题
研究生毕业鉴定
2014/01/29 职场文书
电焊工岗位职责
2014/03/06 职场文书
安全生产月活动总结
2014/05/04 职场文书
关于奉献的演讲稿
2014/05/21 职场文书
党员对照检查材料整改措施思想汇报
2014/09/26 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
房屋租赁意向书范本
2015/05/09 职场文书