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 字符串操作实现代码(截取/替换/查找/分割)
Jun 08 Python
用Python实现QQ游戏大家来找茬辅助工具
Sep 14 Python
Python解决鸡兔同笼问题的方法
Dec 20 Python
Python绘制3D图形
May 03 Python
Python 使用类写装饰器的小技巧
Sep 30 Python
python实现生成字符串大小写字母和数字的各种组合
Jan 01 Python
Python 文件数据读写的具体实现
Jan 24 Python
python str字符串转uuid实例
Mar 03 Python
Python Scrapy图片爬取原理及代码实例
Jun 12 Python
Python csv文件记录流程代码解析
Jul 16 Python
Python字符串对齐方法使用(ljust()、rjust()和center())
Apr 26 Python
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
May 24 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开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
Extjs Ajax 乱码问题解决方案
2009/04/15 Javascript
EasyUI 中 MenuButton 的使用方法
2012/07/14 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
2013/02/26 Javascript
JS 跳转页面延迟2种方法
2013/03/29 Javascript
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
JavaScript实现图片滑动切换的代码示例分享
2016/03/06 Javascript
jQuery遍历节点树方法分析
2016/09/08 Javascript
jQuery实现手机版页面翻页效果的简单实例
2016/10/05 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
详解vue-cli快速构建vue应用并实现webpack打包
2017/12/13 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
vue 2.0 购物车小球抛物线的示例代码
2018/02/01 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
Node.js 进程平滑离场剖析小结
2019/01/24 Javascript
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
Python生成任意范围任意精度的随机数方法
2018/04/09 Python
pytorch: tensor类型的构建与相互转换实例
2018/07/26 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
python3 实现调用串口功能
2019/12/26 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
2020/11/11 Python
详解python的变量缓存机制
2021/01/24 Python
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
英国床和浴室商场:Bed & Bath Emporium
2018/05/20 全球购物
兰蔻俄罗斯官方网站:Lancome俄罗斯
2019/12/09 全球购物
给交警的表扬信
2014/01/12 职场文书
董事长助理工作职责
2014/06/08 职场文书
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB