zoukankan      html  css  js  c++  java
  • Redis-Pipeline

    https://segmentfault.com/a/1190000011440752

    Pipeline

    1. Pipeline概念

    Redis客户端执行一条命令分为以下四个步骤:

    1.发送命令
    2.命令排队
    3.命令执行
    4.返回结果

    其中,第一步+第四步称为Round Trip Time(RTT,往返时间).

      Redis提供了批量操作命令(例如mget,mset等),有效的节约RTT.但大部分命令是不支持批量操作的,例如要执行nhgetall命令,并没有mhgetall存在,需要消耗nRTT.

      Pipeline机制能改善上面这类问题,它能将一组Redis命令进行组装,通过一次RTT传输给Redis,再将这组Redis命令按照顺序执行并装填结果返回给客户端.图1.1中未使用Pipeline执行了n次命令,整个过程需要n个RTT.

    2. 原生批量命令与Pipeline对比

    可以使用Pipeline模拟出批量操作的效果,但是在使用时需要质疑它与原生批量命令的区别,具体包含几点:

    • 原生批量命令是原子性,Pipeline是非原子性的.
    • 原生批量命令是一个命令对应多个key,Pipeline支持多个命令.
    • 原生批量命令是Redis服务端支持实现的,而Pipeline需要服务端与客户端的共同实现.

    3. Pipeline缺点

      Pipeline虽然好用,但是每次Pipeline组装的命令个数不能没有节制,否则一次组装Pipeline数据量过大,一方面会增加客户端的等待时机,另一方面会造成一定的网络阻塞,可以将一次包含大量命令的Pipeline拆分成多次较小的Pipeline来完成.

      Pipeline只能操作一个Redis实例,但即使在分布式Redis场景中,也可以作为批量操作的重要优化方法.

    4. 事务

      Redis提供了简单的功能,将一组需要一起执行的命令放到multiexec两个命令之间.multi命令代表事务的开始,exec命令代表事务结束,他们之间的命令是原子顺序执行的.在exec命令执行之前,中间命令并没有真正执行,而是暂且保存到Redis中。

      Redis根据命令的不同错误有不同的处理机制:

    4.1 命令错误

      比如语法错误,写错命令单词了,会造成整个事务无法执行,redis数据未发生改变。

    4.2 运行时错误

      此时不支持回滚功能,需要开发者自己修改此类问题。

  • 相关阅读:
    LNMP安装了哪些软件?安装目录在哪?
    mysql导入数据大小设置方法
    JavaScript中的execCommand()命令详解及实例展示
    【燕山星云】三十而立,四十不惑...这是我看过最好人生的解读
    es6入门教程完整版
    Fisher's exact test( 费希尔精确检验)
    R语言中的箱图介绍 boxplot
    matlab 中保存某几个变量
    matlab 在代码中,显示错误,退出程序
    matlab 设置横纵坐标刻度的字体!!
  • 原文地址:https://www.cnblogs.com/qmillet/p/13620141.html
Copyright © 2011-2022 走看看