都说 Pipeline 有很大好处,但是能量是守恒的,好坏也是相对的。 所以我们主要来测试看看 Pipeline 的利弊。 带着几个问题我们来进行基本的测试。

  1. Pipeline 对命令数量是否有限制?
  2. Pipeline 打包执行多少命令合适?
  3. Pipeline 批量执行的时候,是否对Redis进行了锁定,导致其他应用无法再进行读写?

Redis 常规使用方式

我们都知道Redis 是单线程的,那么在常规使用情况下,我们使用 Redis ,如下代码执行是什么流程呢?

$key1 = "abc1"; $key2 = "abc2"; $key3 = "abc3"; $redisObj->set($key1, 1); $redisObj->set($key2, 2); $redisObj->set($key3, 3);

Redis 的执行方式是逐条命令: 发送命令->执行->返回执行结果。

如图:

什么是 pipeline 呢?

知道了常规的使用方式,那么我们再来看看 pipeline 模式,pipeline 模式则是将执行的命令写入到缓冲中,最后由exec命令一次性发送给redis执行返回。

我们以灌一个list来进行测试,以20000条list数据为例,来对比一下常规模式的的写入和 pipeline 模式的写入。

Redis pipeline 的执行方式: 打包开始->缓存->打包结束->发送->执行->返回执行结果。

如图:

逐条写模式(常规模式)

<?php $redisObj = new \Redis(); $redisObj->connect('127.0.0.1', 6379);

$t...

[阅读更多 →]