Redis Pipeline 批处理任务

今天分享一个Redis的小功能,Pipeline(流水线)。Pipeline能够将一组Redis命令组装起来,通过一次请求发给Redis服务端,Redis服务端执行完这些命令之后再将这些命令的结果一次性返回给客户端。

Redis执行一条命令分为四个步骤:

  • 发送命令
  • 命令排队
  • 命令执行
  • 返回结果

其中发送命令和返回结果两步的时间和称之为Rount Trip Time(RTT,往返时间)。假设我们以工要向Redis服务端发送 n 条消息,使用Pipeline就能帮我们节省 n - 1 次RTT时间。

如果Redis客户端在上海,服务端在北京,两地直线距离1300公里,假设光纤为光速的 2/3,那么一次RTT的时间为 1300 * 2 / (300000 * 2 / 3) = 13 毫秒,而Redis处理命令的时间通常在微妙级别,所以有Redis的性能瓶颈在网络这么一种说法。

所以在网络延迟比较大的场景下使用Pipeline来处理多条消息,可以大幅度减少请求响应总时间。

Redis的Pipeline功能需要客户端的支持,下面有一段Jedis客户端使用Pipeline功能的代码:

public static void testPipeline(){
    //生成pipeline对象
    Pipeline pipelined = jedis.pipelined();

    //向pipeline对象中添加命令
    pipelined.set("hello", "world");
    pipelined.incr("incrnum");
    pipelined.get("hello");

    //调用syncAndReturnAll方法会执行pipeline中的命令,并且返回结果
    //pipelined.sync()会执行pipeline中的命令,不返回结果
    List<Object> list = pipelined.syncAndReturnAll();
    System.out.println(list);

}

Redis原生也提供了一些批处理命令,如mget、mset等,也能减少多条命令的RTT时间,但是这些原生的批处理命令只能提供单一的命令,不像Pipeline命令那样可以处理很多不同类型的命令。

Pipeline命令虽然好用,但使用的时候还是要注意一些问题的:
- Pipeline是非原子的
- 如果一次组装的Pipeline数据量过大,会增加客户端的等待时间,也会造成Redis服务端的阻塞,可以考虑将一次数据量过大的Pipeline命令拆分成多个小的Pipeline命令来完成。

小功能大用处,一天一个小知识点,学到就是赚到。


喜欢这篇文章的朋友,欢迎扫描下图关注公众号lebronchen,第一时间收到更新内容。
这里写图片描述

Redis集群中,由于集群将数据划分为不同的slot,并且每个节点负责一批slot,所以无法直接执行一些批量操作命令,如mget和pipeline等。这是因为jedis客户端没有封装这些批量操作的命令。\[1\] 然而,如果你需要在Redis集群中进行批量操作,可以使用pipeline来实现。通过使用pipeline,你可以将多个命令一次性发送给Redis服务器,减少了网络通信的开销,提高了性能。\[2\] 要在Redis集群中使用pipeline进行批量操作,你需要将redis-trib.rb文件复制到集群的根目录中。你可以进入到Redis的解压目录,找到src文件夹中的redis-trib.rb文件,然后将其复制到集群目录中。例如,可以使用以下命令将redis-trib.rb文件复制到/root/redis-cluster/目录中:cp redis-trib.rb /root/redis-cluster/。\[3\] 通过使用pipeline和正确配置Redis集群,你可以实现在集群模式下进行批量操作的需求。 #### 引用[.reference_title] - *1* *2* [在Redis集群模式下使用pipeline进行批量操作](https://blog.csdn.net/zc19921215/article/details/128824445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *3* [搭建redis集群,使用,以及批处理启动关闭。](https://blog.csdn.net/weixin_44893467/article/details/111151110)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值