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博客