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函数可变参数定义及其参数传递方式
Aug 02 Python
python内置函数:lambda、map、filter简单介绍
Nov 16 Python
python 将字符串转换成字典dict的各种方式总结
Mar 23 Python
python 执行shell命令并将结果保存的实例
May 11 Python
Python文件监听工具pyinotify与watchdog实例
Oct 15 Python
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
对Pycharm创建py文件时自定义头部模板的方法详解
Feb 12 Python
python使用sessions模拟登录淘宝的方式
Aug 16 Python
Pytorch中Tensor与各种图像格式的相互转化详解
Dec 26 Python
Python面向对象封装操作案例详解
Dec 31 Python
python实现最速下降法
Mar 24 Python
Python趣味入门教程之循环语句while
Aug 26 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
php读取javascript设置的cookies的代码
2010/04/12 PHP
php若干单维数组遍历方法的比较
2011/09/20 PHP
php中运用http调用的GET和POST方法示例
2014/09/29 PHP
js 匿名调用实现代码
2009/06/19 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
jQuery简单实现日历的方法
2015/05/04 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
关于Promise 异步编程的实例讲解
2017/09/01 Javascript
浅析vue深复制
2018/01/29 Javascript
Vue 源码分析之 Observer实现过程
2018/03/29 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
JavaScript数组排序的六种常见算法总结
2020/08/18 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
[02:49:21]2019完美盛典全程录像
2019/12/08 DOTA
理解python多线程(python多线程简明教程)
2014/06/09 Python
python 3.7.0 下pillow安装方法
2018/08/27 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
pandas数据处理进阶详解
2019/10/11 Python
基于python实现微信好友数据分析(简单)
2020/02/16 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
Python如何将模块打包并发布
2020/08/30 Python
详解Selenium 元素定位和WebDriver常用方法
2020/12/04 Python
StubHub墨西哥:购买和出售您的门票
2016/09/17 全球购物
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
安全员岗位职责
2013/11/11 职场文书
党的群众路线教育实践方案
2014/05/11 职场文书
环保项目建议书
2014/08/26 职场文书
新闻人物通讯稿
2014/10/09 职场文书
教师调动申请报告
2015/05/18 职场文书
Java异常处理try catch的基本用法
2021/12/06 Java/Android
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL