资讯专栏INFORMATION COLUMN

【redis专题(15)】管道pipline

frank_fun / 1889人阅读

摘要:简述管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。注意管道只是合并多次操作的一个优化手段,并不具备原子性,隔离性等事务特性。管道模式并不能保证原子性,只能提高多个命令的传输速度。

[toc]

简述

Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。也就是多次IO操作合并成一次IO操作。Redis 管道 (Pipeline) 本身并不是 Redis 服务器直接提供的技术,这个技术本质上是由客户端提供的,跟服务器没有什么直接的关系。

使用管道前:

使用管道后:

对于Redis来说,还是需要进行3次子查询,但是对于整个系统来说,网络通信的次数明显就减少了,并发自然就上去了,吞吐自然也上去了。

示例

管道技术一般应用在程序语言的客户端中。注意:管道只是redis合并多次IO操作的一个优化手段,并不具备原子性,隔离性等事务特性。但是在程序语言中,常常配合事务,提高IO性能。

python中

pipe = redis.pipeline(transaction=true)
pipe.multi()
pipe.incr("books")
pipe.incr("books")
values = pipe.execute()

php

多个命令一起执行,multi默认的参数是通过事务,可选为Redis::PIPELINE。管道模式并不能保证原子性,只能提高多个命令的传输速度。

$ret = $redis->multi(Redis::PIPELINE)
    ->set("key1", "val1")
    ->get("key1")
    ->set("key2", "val2")
    ->get("key2")
    ->exec();
压测

Redis 自带了一个压力测试工具redis-benchmark,使用这个工具就可以进行管道测试。

首先我们对一个普通的 set 指令进行压测,QPS 大约 5w/s。

> redis-benchmark -t set -q
SET: 51975.05 requests per second

我们加入管道选项-P参数,它表示单个管道内并行的请求数量,看下面P=2,QPS 达到了 9w/s。

> redis-benchmark -t set -P 2 -q
SET: 91240.88 requests per second

如果CPU允许,还可以再提高P的参数值进行测试;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37297.html

相关文章

  • Redis学习笔记 - pipline(流水线、管道

    摘要:此时,节省网络传输时间是非常重要的。二与原生批量操作的对比等原生批量操作等批量操作是原子操作是非原子操作三使用建议注意每次携带的数据量,数据量不宜过大每次只能作用在一个节点上 一、什么是 pipline 1. 一次网络命令的通信模型 1次网络命令时间 = 1次网络传输时间(往返) + 1次命令执行时间 showImg(https://segmentfault.com/img/remot...

    kviccn 评论0 收藏0
  • Redis学习笔记 - pipline(流水线、管道

    摘要:此时,节省网络传输时间是非常重要的。二与原生批量操作的对比等原生批量操作等批量操作是原子操作是非原子操作三使用建议注意每次携带的数据量,数据量不宜过大每次只能作用在一个节点上 一、什么是 pipline 1. 一次网络命令的通信模型 1次网络命令时间 = 1次网络传输时间(往返) + 1次命令执行时间 showImg(https://segmentfault.com/img/remot...

    codeKK 评论0 收藏0
  • Redis学习笔记 - pipline(流水线、管道

    摘要:此时,节省网络传输时间是非常重要的。二与原生批量操作的对比等原生批量操作等批量操作是原子操作是非原子操作三使用建议注意每次携带的数据量,数据量不宜过大每次只能作用在一个节点上 一、什么是 pipline 1. 一次网络命令的通信模型 1次网络命令时间 = 1次网络传输时间(往返) + 1次命令执行时间 showImg(https://segmentfault.com/img/remot...

    csRyan 评论0 收藏0
  • python操作redis(二)

    摘要:连接需要一个可以运行的服务,如何安装配置首先安装模块在中操作连接池使用来管理对一个的所有连接,避免每次建立释放连接的开销。可以直接建立一个连接池,然后作为参数,这样就可以实现多个实例共享一个连接池。 连接 redis-py需要一个可以运行的redis服务,如何安装配置redis?首先安装redis模块 sudo pip3 install redis 在ipython中操作 In [1]...

    jayce 评论0 收藏0
  • python操作redis(二)

    摘要:连接需要一个可以运行的服务,如何安装配置首先安装模块在中操作连接池使用来管理对一个的所有连接,避免每次建立释放连接的开销。可以直接建立一个连接池,然后作为参数,这样就可以实现多个实例共享一个连接池。 连接 redis-py需要一个可以运行的redis服务,如何安装配置redis?首先安装redis模块 sudo pip3 install redis 在ipython中操作 In [1]...

    didikee 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<