Redis的新特性:pipeline(管道)

Redis本身是一个cs模式的tcp server, client可以通过一个socket连续发起多个请求命令。 每个请求命令发出后client通常会阻塞并等待redis服务端处理,redis服务端处理完后将结果返回给client。

redis的pipeline(管道)功能在命令行中没有,但redis是支持pipeline的,而且在各个语言版的client中都有相应的实现。 由于网络开销延迟,即算redis server端有很强的处理能力,也由于收到的client消息少,而造成吞吐量小。当client 使用pipelining 发送命令时,redis server必须部分请求放到队列中(使用内存)执行完毕后一次性发送结果;如果发送的命名很多的话,建议对返回的结果加标签,当然这也会增加使用的内存;

Pipeline在某些场景下非常有用,比如有多个command需要被“及时的”提交,而且他们对相应结果没有互相依赖,而且对结果响应也无需立即获得,那么pipeline就可以充当这种“批处理”的工具;而且在一定程度上,可以较大的提升性能,性能提升的原因主要是TCP链接中较少了“交互往返”的时间。不过在编码时请注意,pipeline期间将“独占”链接,此期间将不能进行非“管道”类型的其他操作,直到pipeline关闭;如果你的pipeline的指令集很庞大,为了不干扰链接中的其他操作,你可以为pipeline操作新建Client链接,让pipeline和其他正常操作分离在2个client中。不过pipeline事实上所能容忍的操作个数,和socket-output缓冲区大小/返回结果的数据尺寸都有很大的关系;同时也意味着每个redis-server同时所能支撑的pipeline链接的个数,也是有限的,这将受限于server的物理内存或网络接口的缓冲能力。

python 测试代码:

同时提交10000个command:

#!/usr/bin/python2
import redis
import time
def without_pipeline():
    r=redis.Redis()
    for i in range(10000):
        r.ping()
    return
def with_pipeline():
    r=redis.Redis()
    pipeline=r.pipeline()
    for i in range(10000):
        pipeline.ping()
    pipeline.execute()
    return
def bench(desc):
    start=time.clock()
    desc()
    stop=time.clock()
    diff=stop-start
    print "%s has token %s" % (desc.func_name,str(diff))
if __name__=='__main__':
    bench(without_pipeline)
    bench(with_pipeline)

测试结果:

[root@localhost ~]# python2 redis_piple.py

without_pipeline has token 1.11

with_pipeline has token 0.29

注:在本机测试,基本忽略网络延迟,pipeline还是有很高的性能的。

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/storage/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索命令
, redis
, 链接
, client
, python tokenize
, 结果
, pipeline
, python使用redis
, Redis应用场景
, Redis的应用场景
redis的使用场景
,以便于您获取更多的相关知识。

时间: 2025-01-01 17:10:29

Redis的新特性:pipeline(管道)的相关文章

IIS7的六大新特性

Windows的网络服务器Internet Information Services(IIS)7.0 将整合ASP.NET,改善诊断系统,引入新款管理员用户界面,配置系统以及一系列新构件. 微软IIS,网络平台及工具开发组项目经理Bill Staples以及产品经理Mary Alice Colvin指出,虽然微软下一代网络服务器IIS7.0到2006年Longhorn发布时才推出,但现时许多Web开发者都迫不及待地想知道IIS 7.0有那些具体改进之处.在采访中,Staples和Colvin都毫

AutoCAD的新特性

1.2.1 A utoCAD 2000 的新特性 AutoCAD 2000 的推出将 AutoCAD 强大的功能又提升到了一个崭新的高度. AutoCAD 2000 是一个在 Windows 平台上开发.完全符合 Windows 标准.第三代面向对象结构的一体化应用软件,与前一版本比较, AutoCAD 2000 新增加了 400 多项功能,主要包含: • 支持多文档环境( Multi-Document Environment ),并可以对多个图形中的对象进行拖曳.特性匹配.剪切.复制和粘贴等操

Python3.6新特性

本文解释了Python 3.6中的新功能,与3.5相比.Python 3.6于2016年12月23日发布.有关完整的详细信息,请参阅更新日志. Summary – Release highlights(摘要) 新特性 PEP 498, formatted string literals. (格式化的字符串文字.) PEP 515, underscores in numeric literals. (以数字文字表示.) PEP 526, syntax for variable annotation

PHP7.0,PHP7.1.x新特性

PHP7.1.x 新特性 风.fox 1.可为空(Nullable)类型 类型现在允许为空,当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null .可以通过在类型前面加上一个问号来使之成为可为空的. function test(?string $name) { var_dump($name); } 以上例程会输出: string(5) "tpunt" NULL Uncaught Error: Too few arguments to function tes

iOS 各版本中的新特性(What's New in iOS)- 目录翻译完成

iOS 各版本中的新特性(What's New in iOS) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 介绍 Introduction文档组织结构 Organization of Thi

Java 8新特性

编者注:Java 8已经公布有一段时间了,种种迹象表明Java 8是一个有重大改变的发行版.在Java Code Geeks上已经有大量的关于Java 8 的教程了,像玩转Java 8--lambda与并发,Java 8 Date Time API 教程: LocalDateTime和在Java 8中抽象类与接口的比较. 我们也在其他地方引用了15个必读的Java 8教程.当然,我们也探究了Java 8的一些不足之处,比如Java 8的"黑暗面". 现在,是时候把所有Java 8的重要

MySQL 5.7 新特性 generated columns

MySQL 5.7的一个新特性,generated column http://dev.mysql.com/doc/refman/5.7/en/create-table.html#create-table-generated-columns 即generated column的值是普通column产生值,有点像视图,但是又有别于视图,因为它可以选择是否存储generated column产生的值. CREATE TABLE triangle ( sidea DOUBLE, sideb DOUBL

Node.js v8.0.0 带来了哪些主要新特性

Node.js于5月30号在其官方博客上发布了Node.js v8.0.0.这一版本将成为当前的长期维护版本,从2017年10月开始到2019年12月31号.而Node.js v6.0.0将会在2018年4月进入维护模式,并于2019年4月结束. 最新发布的版本代号为Carbon,带来了很多重要的特性改进和一些全新的特性. 引入async_hooks模块新引入实验性模块async_hooks(之前叫作async_wrap),它包含了一组用于诊断的API,开发人员可以用它监控Node.js事件循环

ASP.NET 5系列教程 (一):领读新特性

近期微软发布了ASP.NET 5.0,本次发布的新特性需求源于大量用户的反馈和需求,例如灵活的跨平台运行时和自主部署能力使ASP.NET应用不再受限于IIS.Cloud-ready环境配置降低了云端部署的门槛,另外源码开放无疑也是一个重量级惊喜.这些更改会有助于创建易于开发.部署.维护和现代的Web应用程序.相信看到以上几点作为.NET程序员的你已经迫不及待体验ASP.NET 5 的新功能了,下面我们就来看下这些新特性. ASP.NET 5 是用于创建Web应用的框架,相对于以前的版本它更加简练