5 Redis 管道

1 问题:如何优化频繁命令往返造成的性能瓶颈?

  • Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。
  • 一个请求会遵循以下步骤:
    • 1客户端向服务端发送命令分四步(发送命令→命令排队→命令执行-返回结果),并监听Socket返回,通常以阻塞模式等待服务端响应。
    • 2服务端处理命令,并将结果返回给客户端。 上述两步称为: Round Trip Time(简称RTT,数据包往返于两端的时间)。
  • 如果同时需要执行大量的命令,那么就要等待上一条命令应答后再执行
  • 这中间不仅仅多了RTT (Round Time Trip) ,而且还频繁调用系统IO, 发送网络请求,同时需要redis调用多次read()和write()系统方法, 系统方法会将数据从用户态转移到内核态,这样就会对进程上下文有比较大的影响了,性能不太好

2 管道是什么:

  • 管道(pipeline)可以一次性发送多条命令给服务端,服务端依次处理完毕后,通过一 条响应一次性将结果返回,通过减少客户端与redis的通信次数来实现降低往返延时时间。
  • pipeline实现的原理是队列,先进先出特性就保证数据的顺序性。
  • 批处理命令变种优化措施,类似Redis的原生批命令(mget和mset)

3 实践

cat cmd.txt | redis-cli --pipe

4 注意事项

  • 事务具有原子性,管道不具有原子性
  • 执行事务时会阻塞其他命令的执行,而执行管道中的命令时不会
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是redis管道首先看一个例子 public static void test100w(){ 我本机的执行结果...
    lijiaccy阅读 374评论 0 0
  • 请求/响应网关和RTT Redis是一个使用被称为请求/响应网关的客户机-服务器(client-server)模型...
    颍水书生阅读 827评论 0 1
  • 请求/响应 协议与往返时延 Redis 基于TCP协议实现服务端,使用客户端服务器模型(请求/应答 协议)进行通讯...
    wzhwizard阅读 313评论 0 0
  • 请求/响应协议和RTT Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。 这意味着通常情况下...
    GGBond_8488阅读 183评论 0 1
  • Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:客...
    奇点一氪阅读 323评论 0 0