Featured image of post redis管道-pipeline

redis管道-pipeline

本文阅读量

产生

由于redis是单线程,所以在执行多个命令的时候,都需要等待上一条命令执行完成,才能执行下一条命令。

为了减少客户端于redis的通信次数,pipeline就产生了。

pipeline介绍

Pipeline指的是管道技术,指的是客户端允许将多个请求依次发给服务器,过程中而不需要等待请求的回复,在执行完成后一次性将结果返回,当一组命令中的每一条命令都不依赖于之前命令的执行结果时就可以将这组命令一起通过管道发出。

管道是通过减少客户端于redis的通信次数来实现降低往返时延累计值的目的。

普通请求模型

Pipeline请求模型

从两个图的对比中可看出,普通的请求模型是同步的,每次请求对应一次IO操作等待; 而Pipeline 化之后所有的请求合并为一次IO,除了时延可以降低之外,还能大幅度提升系统吞吐量。

使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$redis = new Redis();

//开启管道模式
$pipe = $redis->multi(Redis::PIPELINE);

//循环遍历数据,执行操作
foreach ($users as $user_id => $username)
{
	// 用户被访问的次数+1
	$pipe->incr('accessed:' . $user_id);

	// 获取用户数据记录
	$pipe->get('user:' . $user_id);
}
// 开始执行管道里所有命令
$users = $pipe->exec();
// 取消管道操作
$pipe->discard();
使用 Hugo 构建
主题 StackJimmy 设计