一 概述

Redis中的Pipeline类似于Linux操作系统中的管道机制。

二 Redis中Pipeline原理

Redis基于请求/响应(Request/Response)模型,每个请求处理需要一一应答,当需要处理多条命令的时候,需要等待上一条命令应答之后,再执行之后命令的应答,此过程中不仅会存在很多来回交互的时间,而且会频繁的调用系统I/O,并发送网络请求。此时Pipeline就登场了,Pipeline支持一次执行多条命令,而不需要等待上一条命令的结果,客户端首先将需要执行的命令写入缓存中或者先汇总到一个文本中,然后一次性发送给Redis进行执行,这样Pipeline可以将I/O往返的时间缩减到一次,进而节省了多次I/O的往返时间,当然这需要Pipeline执行的指令之间没有相互依赖,如果存在依赖相关性,还是通过Pipeline进行分批发送。

三 Redis通过管道机制实现批量命令执行

批量生成redis测试数据
1.Linux Bash下面执行
  for((i=1;i<=20000000;i++));  do echo "set k$i v$i" >> /tmp/redisTest.txt; done;
  该命令会生成2千万条redis批量设置kv的语句(key=kn,value=vn)写入到/tmp目录下的redisTest.txt文件中
2.用vim去掉行尾的^M符号,使用方式如下::
  vim /tmp/redisTest.txt
    :set fileformat=dos #设置文件的格式,通过这句话去掉每行结尾的^M符号
    ::wq #保存退出
3.通过redis提供的管道--pipe形式,运行redis,传入文件的指令批量灌数据,需要花接近10分钟左右
  cat /tmp/redisTest.txt | 你主机redis的路径/redis-5.0.0/src/redis-cli -h 主机ip -p 端口号 --pipe