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使用7z解压软件备份文件脚本分享
Feb 21 Python
python调用java的Webservice示例
Mar 10 Python
使用python实现生成用户信息
Mar 20 Python
python实现list元素按关键字相加减的方法示例
Jun 09 Python
Python3编程实现获取阿里云ECS实例及监控的方法
Aug 18 Python
深入理解Django的自定义过滤器
Oct 17 Python
Python数据分析之获取双色球历史信息的方法示例
Feb 03 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
Jun 12 Python
python读取并定位excel数据坐标系详解
Jun 26 Python
详解python和matlab的优势与区别
Jun 28 Python
Python将二维列表list的数据输出(TXT,Excel)
Apr 23 Python
详解Python常用的魔法方法
Jun 03 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的数组总结【经验】
2016/05/05 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
PHP的PDO事务与自动提交
2019/01/24 PHP
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
jQuery实现类似淘宝购物车全选状态示例
2013/06/26 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
JS调试必备的5个debug技巧
2014/03/07 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
jQuery简单实现彩色云标签效果示例
2016/08/01 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
微信小程序实现类似微信点击语音播放效果
2020/03/30 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
webpack+express实现文件精确缓存的示例代码
2020/06/11 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
2020/11/11 Javascript
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
深入解析Python中的lambda表达式的用法
2015/08/28 Python
python使用turtle绘制分形树
2018/06/22 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
网站域名和主机:Domain.com
2019/04/01 全球购物
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
仓管员岗位责任制
2014/02/19 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
2019旅游导游工作总结
2019/06/27 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书
python文件目录操作之os模块
2021/05/08 Python
配置Kubernetes外网访问集群
2022/03/31 Servers
Android studio 简单计算器的编写
2022/05/20 Java/Android