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 相关文章推荐
以windows service方式运行Python程序的方法
Jun 03 Python
Python表示矩阵的方法分析
May 26 Python
Python实现图片滑动式验证识别方法
Nov 09 Python
对Python3.6 IDLE常用快捷键介绍
Jul 16 Python
python的turtle库使用详解
May 10 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
Aug 26 Python
使用pandas的box_plot去除异常值
Dec 10 Python
python 解决flask uwsgi 获取不到全局变量的问题
Dec 22 Python
keras tensorflow 实现在python下多进程运行
Feb 06 Python
django中的数据库迁移的实现
Mar 16 Python
Python Map 函数的使用
Aug 28 Python
python自动计算图像数据集的RGB均值
Jun 18 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下清空字符串中的HTML标签的代码
2010/09/06 PHP
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
利用谷歌 Translate API制作自己的翻译脚本
2014/06/04 PHP
php中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
php观察者模式应用场景实例详解
2017/02/03 PHP
PDO::beginTransaction讲解
2019/01/27 PHP
Yaf框架封装的MySQL数据库操作示例
2019/03/06 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
JavaScript 数组循环引起的思考
2010/01/01 Javascript
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
JavaScript实现带标题的图片轮播特效
2015/05/20 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
JQuery的attr 与 val区别
2016/06/12 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
Vue组件的使用教程详解
2018/01/05 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
2018/08/19 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
Python创建一个元素都为0的列表实例
2019/11/28 Python
python-jwt用户认证食用教学的实现方法
2021/01/19 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
报关简历自我评价怎么写
2013/09/19 职场文书
出纳岗位职责模板
2013/11/27 职场文书
校园活动策划书范文
2014/01/10 职场文书
打架检讨书2000字
2014/02/22 职场文书
争先创优演讲稿
2014/09/15 职场文书
司机岗位职责范本
2015/04/10 职场文书
一文搞懂MySQL索引页结构
2022/02/28 MySQL