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基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
Dec 08 Python
Python 正则表达式的高级用法
Dec 04 Python
Python zip()函数用法实例分析
Mar 17 Python
解决Python下json.loads()中文字符出错的问题
Dec 19 Python
使用Python批量修改文件名的代码实例
Jan 24 Python
Python操作配置文件ini的三种方法讲解
Feb 22 Python
解决python tkinter界面卡死的问题
Jul 17 Python
django删除表重建的实现方法
Aug 28 Python
python网络编程之多线程同时接受和发送
Sep 03 Python
Python调用JavaScript代码的方法
Oct 27 Python
python中使用.py配置文件的方法详解
Nov 23 Python
Django前后端分离csrf token获取方式
Dec 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
为php4加入动态flash文件的生成的支持
2006/10/09 PHP
PHP form 表单传参明细研究
2009/07/17 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
PHP实现微信退款功能
2018/10/02 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
JSON+JavaScript处理JSON的简单例子
2013/03/20 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
node.js路径处理方法以及绝对路径详解
2021/03/04 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
layui问题之模拟table表格中的选中按钮选中事件的方法
2019/09/20 Javascript
vue实现单一筛选、删除筛选条件
2020/10/26 Javascript
vue使用vant中的checkbox实现全选功能
2020/11/17 Vue.js
[04:03]辉夜杯主赛事 12月25日RECAP精彩回顾
2015/12/26 DOTA
python中xrange和range的区别
2014/05/13 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
Python 移动光标位置的方法
2019/01/20 Python
Python异步编程之协程任务的调度操作实例分析
2020/02/01 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
巴西在线鞋店:Shoestock
2017/10/28 全球购物
龟牌英国商店:Turtle Wax Brand Store UK
2019/07/02 全球购物
煤矿班组长岗位职责
2013/12/29 职场文书
安全口号大全
2014/06/21 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
高三教师工作总结2015
2015/07/21 职场文书
《观潮》教学反思
2016/02/17 职场文书
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang