你能说说Redis中Pipeline和事务的区别吗

首先PipeLine看起来和事务很像,感觉都是一批批的处理,但是两者还是存在明显的区别的:

  • Pipeline是客户端的行为,对于服务器来说是透明的。所以服务器是无法知道客户端发送过来的命令是以一种普通命令的形式还是使用Pipeline的形式发送过来的。
  • 事务是是现在服务器端的行为。在用户执行MULTI命令时候,服务器会将对应这个用户的客户端对象设置成一个特殊状态,在该状态下用户执行的查询命令不会被真正执行。而是被服务器缓存起来,直到用户执行EXEC命令之后,服务器才会将对应客户端对象缓存中的命令按照提交的顺序依次执行。
  • 使用Pipeline是可以提高服务器的吞吐能力,并提高服务器查询处理Redis的请求能力。但是需要注意的是,当通过Pipeline提交的查询数据命令较少的时候,可以被内核缓冲区所容纳的时候,Redis可以保证这些命令执行的原子性。然而当数据量一旦过大,超过了内核缓冲区接收的大小,命令的执行将会被打断,原子性也就无法得到保证。因为Pipeline只是一种提高服务器吞吐能力的机制。想要命令以事务的方式原子性的被执行,还是需要使用事务机制。或者使用更加高级的脚本功能以及模块功能。
  • 可以将Pipeline和事务结合起来使用,能减少事务的命令在网络上的传输时间,将多次网络IO缩减为一次网络IO。

猜你喜欢

转载自blog.csdn.net/weixin_50503886/article/details/131427219