Page

【Redis】redis中pipeline跟multi的区别

1008Anson20-07-29


【Redis】redis中pipeline跟multi的区别

multi:

$redis = new redis(); 

$redis->connect('127.0.0.1',6379); 

$handle = $redis->multi(); 

$handle->incr('a'); 

$handle->incr('b'); 

$handle->exec();


每执行一次incr,客户端会给服务端发送一次请求,服务端把命令缓存起来,等客户端调用exec的时候再执行命令并返回全部结果。


pipeline:

$redis = new redis();
$redis->connect('127.0.0.1',6379);
$handle = $redis->pipeline();
$handle->incr('a');
$handle->incr('b');
$handle->exec();

每执行一次incr,客户端会把命令缓存起来,等执行exec的时候再一并发到服务端,服务端在拆解执行并返回全部结果


原子性区别:

multi可以保证原子性,而pipeline不保证原子性


两者的好处:

减少RTT,减少IO调用次数(IO涉及到用户态与内核态的切换)



来自anson博客 

http://www.tp0.top