python使用pipeline批量读写redis的方法


Posted in Python onFebruary 18, 2019

用了很久的redis了。随着业务的要求越来越高。对redis的读写速度要求也越来越高。正好最近有个需求(需要在秒级取值1000+的数据),如果对于传统的单词取值,循环取值,消耗实在是大,有小伙伴可能考虑到多线程,但这并不是最好的解决方案,这里考虑到了redis特有的功能pipeline管道功能。

下面就更大家演示一下pipeline在python环境下的使用情况。

1、插入数据

>>> import redis

>>> conn = redis.Redis(host='192.168.8.176',port=6379)

>>> pipe = conn.pipeline()

>>> pipe.hset("hash_key","leizhu900516",8)
Pipeline<ConnectionPool<Connection<host=192.168.8.176,port=6379,db=0>>>

>>> pipe.hset("hash_key","chenhuachao",9)
Pipeline<ConnectionPool<Connection<host=192.168.8.176,port=6379,db=0>>>

>>> pipe.hset("hash_key","wanger",10)
Pipeline<ConnectionPool<Connection<host=192.168.8.176,port=6379,db=0>>>

>>> pipe.execute()
[1L, 1L, 1L]
>>>

2、批量读取数据

>>> pipe.hget("hash_key","leizhu900516")
Pipeline<ConnectionPool<Connection<host=192.168.8.176,port=6379,db=0>>>

>>> pipe.hget("hash_key","chenhuachao")
Pipeline<ConnectionPool<Connection<host=192.168.8.176,port=6379,db=0>>>

>>> pipe.hget("hash_key","wanger")
Pipeline<ConnectionPool<Connection<host=192.168.8.176,port=6379,db=0>>>

>>> result = pipe.execute()

>>> print result
['8', '9', '10']  #有序的列表
>>>

总结:redis的pipeline就是这么简单,实际生产环境,根据需要去编写相应的代码。思路同理,如:

redis_db = redis.Redis(host='127.0.0.1',port=6379)
data = ['zhangsan', 'lisi', 'wangwu']

with redis_db.pipeline(transaction=False) as pipe:
  for i in data:
    pipe.zscore(self.key, i)

  result = pipe.execute()

print result
# [100, 80, 78]

线上的redis一般都是集群模式,集群模式下使用pipeline的时候,在创建pipeline的对象时,需要指定

pipe =conn.pipeline(transaction=False)

经过线上实测,利用pipeline取值3500条数据,大约需要900ms,如果配合线程or协程来使用,每秒返回1W数据是没有问题的,基本能满足大部分业务。

以上这篇python使用pipeline批量读写redis的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python读取图片EXIF信息类库介绍和使用实例
Jul 10 Python
python中lambda与def用法对比实例分析
Apr 30 Python
python装饰器初探(推荐)
Jul 21 Python
Python实现的自定义多线程多进程类示例
Mar 23 Python
对pandas进行数据预处理的实例讲解
Apr 20 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
Dec 22 Python
使用python实现简单五子棋游戏
Jun 18 Python
Python3 hashlib密码散列算法原理详解
Mar 30 Python
Python JSON常用编解码方法代码实例
Sep 05 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
Nov 17 Python
Python字符串对齐方法使用(ljust()、rjust()和center())
Apr 26 Python
Python 多线程处理任务实例
Nov 07 Python
Python变量类型知识点总结
Feb 18 #Python
Python中文编码知识点
Feb 18 #Python
对Python的多进程锁的使用方法详解
Feb 18 #Python
对python中if语句的真假判断实例详解
Feb 18 #Python
python判断文件是否存在,不存在就创建一个的实例
Feb 18 #Python
解决python打不开文件(文件不存在)的问题
Feb 18 #Python
python多线程调用exit无法退出的解决方法
Feb 18 #Python
You might like
基于文本的搜索
2006/10/09 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
2013/11/29 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
2015/09/07 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
通过命令行生成vue项目框架的方法
2017/07/12 Javascript
node跨域请求方法小结
2017/08/25 Javascript
Node.js学习之查询字符串解析querystring详解
2017/09/28 Javascript
js实现上传并压缩图片效果
2018/01/10 Javascript
vue-lazyload图片延迟加载插件的实例讲解
2018/02/09 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
vue实现把接口单独存放在一个文件方式
2020/08/13 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
Python中的Numpy入门教程
2014/04/26 Python
python在不同层级目录import模块的方法
2016/01/31 Python
Python程序员面试题 你必须提前准备!
2018/01/16 Python
python字典快速保存于读取的方法
2018/03/23 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
python time.strptime格式化实例详解
2021/02/03 Python
html5 canvas实现圆形时钟代码分享
2013/12/25 HTML / CSS
详解Html5 监听拦截Android返回键方法
2018/04/18 HTML / CSS
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
MyFrenchPharma中文网:最大的法国药妆平台
2016/10/07 全球购物
销售人员获奖感言
2014/02/05 职场文书
怎样拟定创业计划书
2014/05/01 职场文书
报到证办理个人委托书
2014/10/06 职场文书
个人合作协议范本
2015/08/06 职场文书
Go语言应该什么情况使用指针
2021/07/25 Golang
vue使用localStorage持久性存储实现评论列表
2022/04/14 Vue.js