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发送伪造的arp请求
Jan 09 Python
Python实现的视频播放器功能完整示例
Feb 01 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
Oct 17 Python
如何运行带参数的python脚本
Nov 15 Python
Python计算公交发车时间的完整代码
Feb 12 Python
Python处理mysql特殊字符的问题
Mar 02 Python
keras .h5转移动端的.tflite文件实现方式
May 25 Python
Keras预训练的ImageNet模型实现分类操作
Jul 07 Python
Python faker生成器生成虚拟数据代码实例
Jul 20 Python
python实现计算图形面积
Feb 22 Python
上帝为你开了一扇窗之Tkinter常用函数详解
Jun 02 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在window iis的莫名问题的测试方法
2013/05/14 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
原生javascript实现Tab选项卡切换功能
2015/01/12 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
Highcharts使用简例及异步动态读取数据
2015/12/30 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
理解javascript正则表达式
2016/03/08 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
使用Bootstrap美化按钮实例代码(demo)
2017/02/03 Javascript
JavaScript中的高级函数
2018/01/04 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
vue+axios+element ui 实现全局loading加载示例
2018/09/11 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
Vue实现菜单切换功能
2020/11/08 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
python中快速进行多个字符替换的方法小结
2016/12/15 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
python如何写个俄罗斯方块
2020/11/06 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
美国婴儿用品店:Babies”R”Us
2017/10/12 全球购物
进程的查看和调度分别使用什么命令
2013/12/14 面试题
心理健康教育心得体会
2013/12/29 职场文书
餐饮收银员岗位职责
2014/02/07 职场文书
项目委托协议书(最新)
2014/09/13 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
高中生逃课检讨书
2014/10/10 职场文书
2014年内部审计工作总结
2014/12/09 职场文书
工人先锋号申报材料
2014/12/29 职场文书
高中班主任评语
2014/12/30 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
tensorflow中的数据类型dtype用法说明
2021/05/26 Python