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的socket编程入门教程
Apr 23 Python
Django框架中的对象列表视图使用示例
Jul 21 Python
Python制作爬虫抓取美女图
Jan 20 Python
tensor和numpy的互相转换的实现示例
Aug 02 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 Python
如何提高python 中for循环的效率
Apr 15 Python
Pycharm如何导入python文件及解决报错问题
May 10 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
Aug 02 Python
浅谈matplotlib默认字体设置探索
Feb 03 Python
Python爬虫UA伪装爬取的实例讲解
Feb 19 Python
python如何为list实现find方法
May 30 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 array的学习笔记
2012/05/10 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
javascript一点特殊用法
2008/05/28 Javascript
JavaScript Timer实现代码
2010/02/17 Javascript
Jquery ui css framework
2010/06/28 Javascript
document.getElementById介绍
2011/09/13 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
js判断undefined类型示例代码
2014/02/10 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
运动检测ViBe算法python实现代码
2018/01/09 Python
python实现京东秒杀功能
2018/07/30 Python
初探CSS3中的calc()功能
2015/07/14 HTML / CSS
css 如何让背景图片拉伸填充避免重复显示
2013/07/11 HTML / CSS
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
英国快时尚女装购物网站:PrettyLittleThing
2018/08/15 全球购物
英国探险旅游专家:Explore
2018/12/20 全球购物
教师专业自荐书范文
2014/02/10 职场文书
2014新年元旦活动策划方案
2014/02/18 职场文书
小学英语课后反思
2014/04/26 职场文书
难忘的一天教学反思
2014/04/30 职场文书
工作经验交流材料
2014/12/30 职场文书
2015年教师党员公开承诺书
2015/01/22 职场文书
初中英语教学反思范文
2016/02/15 职场文书