文章目录

  • 1.什么是Redis管道
  • 2.管道操作示例
  • 3.管道注意事项
  • 3.1.管道与原生批量命令的区别
  • 3.2.管道与事务的区别


1.什么是Redis管道

一次请求/响应服务器能实现处理新的请求即使旧的请求还未被响应。这样就可以将多个命令发送到服务器,而不用等待回复,最后在一个步骤中读取该答复。

2.管道操作示例

redis管道建议批大小_客户端


jedis对管道的操作

Pipeline pipeline = conn.pipelined();
for(Strudent student: stuList){
	String name = student.getName();
	pipeline.incry(name);
}
List<Object> response = pipeline.syncAndReturnAll();

3.管道注意事项

  • pipeline缓冲的命令只是会依次执行,不保证原子性,如果执行过程中发生异常,将会继续执行后续的命令。
  • 使用pipeline组装的命令个数不能太多,不然数据量过大,客户端阻塞的时间可能过久,同时服务端此时也被迫恢复一个队列答复,占用很多内存。

3.1.管道与原生批量命令的区别

  1. 原生批量命令是原子性的例如(mget、mset)。pipeline是非原子性的
  2. 原生批量命令一次只能执行一种命令,但是pipeline支持一次执行多种命令。
  3. 原生批量命令是服务端实现的,而pipeline需要服务端与客户端共同完成。

3.2.管道与事务的区别

  1. 事务里面的命令是在服务端缓存,当发出exec命令的时候,服务端就会判断并执行事务命令。管道里面的命令是在客户端缓存,当客户端结束管道后一次发送到服务端,服务端读取后按照先后顺序先后执行。所以事务的命令是一条一条发的,而管道的是一次性发送到服务端的。
  2. 执行事务时会阻塞其他命令的执行,而执行管道中的命令时不会。
  3. 事务中出现语法错误会导致事务不被执行,而管道出现语法错误,依然会执行其他命令。