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的内存泄漏及gc模块的使用分析
Jul 16 Python
跟老齐学Python之list和str比较
Sep 20 Python
python SocketServer源码深入解读
Sep 17 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
python飞机大战 pygame游戏创建快速入门详解
Dec 17 Python
python通过文本在一个图中画多条线的实例
Feb 21 Python
使用Python将Exception异常错误堆栈信息写入日志文件
Apr 08 Python
python进行参数传递的方法
May 12 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 Python
python3爬虫GIL修改多线程实例讲解
Nov 24 Python
Pycharm 跳转回之前所在页面的操作
Feb 05 Python
利用Python将list列表写入文件并读取的方法汇总
Mar 25 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取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
PHP 读取大文件并显示的简单实例(推荐)
2016/08/12 PHP
php中foreach结合curl实现多线程的方法分析
2016/09/22 PHP
php实现的网页版剪刀石头布游戏示例
2016/11/25 PHP
可以支持多中格式的JS键盘
2007/05/02 Javascript
用JavaScript调用WebService的示例
2008/04/07 Javascript
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
元素绑定click点击事件方法
2015/06/08 Javascript
js模块加载方式浅析
2017/08/12 Javascript
利用Vue实现简易播放器的完整代码
2020/12/30 Vue.js
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python实现子类调用父类的方法
2014/11/10 Python
详解MySQL数据类型int(M)中M的含义
2016/11/20 Python
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
Python能做什么
2020/06/02 Python
10个顶级Python实用库推荐
2021/03/04 Python
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
中级会计职业生涯规划范文
2014/01/16 职场文书
音乐教学案例
2014/01/30 职场文书
校园之声广播稿
2014/01/31 职场文书
数控技术应用个人求职信范文
2014/02/03 职场文书
企业内控岗位的职责
2014/02/07 职场文书
临床医师个人自我评价
2014/04/06 职场文书
募捐倡议书
2014/04/14 职场文书
广告学专业毕业生自荐信
2014/05/28 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
2019年最新七夕唯美祝福语(60条)
2019/07/22 职场文书
浅谈node.js中间件有哪些类型
2021/04/29 Javascript
JS如何实现基于websocket的多端桥接平台
2021/05/14 Javascript
关于python中readlines函数的参数hint的相关知识总结
2021/06/24 Python
Python基础数据类型tuple元组的概念与用法
2021/08/02 Python
Python爬虫网络请求之代理服务器和动态Cookies
2022/04/12 Python
python解析照片拍摄时间进行图片整理
2022/07/23 Python