Redis管道

这篇具有很好参考价值的文章主要介绍了Redis管道。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。一个请求会遵循以下步骤:

1 客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果),并监听Socket返回,通常以阻塞模式等待服务端响应。

2 服务端处理命令,并将结果返回给客户端。

上述两步称为:Round Trip Time(简称RTT,数据包往返于两端的时间),问题笔记最下方

Redis管道

如果同时需要执行大量的命令,那么就要等待上一条命令应答后再执行,这中间不仅仅多了RTT(Round Time Trip),而且还频繁调用系统IO,发送网络请求,同时需要redis调用多次read()和write()系统方法,系统方法会将数据从用户态转移到内核态,这样就会对进程上下文有比较大的影响了,性能不太好,o(╥﹏╥)o

如何优化频繁命令往返造成的性能瓶颈——管道

Pipeline是为了解决RTT往返时,仅仅是将命令打包一次性发送,对整个Redis的执行不造成其它任何影响。是批处理命令变种优化措施类似于Redis的原生批命令(mget和mset)

案例

Redis管道

小结

Pipeline与原生批量命令对比:

  1. 原生批量命令是原子性(如mset,mget),Pipeline是非原子性。

  2. 原生批量命令一次只能执行一种命令,Pipeline支持批量执行不同的命令。

  3. 原生批量命令是服务端实现,而Pipeline需要服务端与客户端共同完成。

Pipeline与事物对比:

  1. 事务具有原子性,管道不具有原子性。

  2. 管道一次性将多条命令发送到服务器,事务是一条一条的发,事务只有在接收到exec命令后才会执行,管道不会。

  3. 执行事务时会阻塞其他命令的执行,而执行管道中的命令时不会。

使用PIpeline注意事项:

  • PIpeline缓冲的指令只是会依次执行,不保证原子性,如果执行中指令发生异常,将会继续执行后续的指令。

  • 使用PIpeline组装的命令个数不能太多,不然数据量过大客户端阻塞的时间可能过久,同时服务端此时也被迫恢复一个队列的答复,占用很多内存。文章来源地址https://www.toymoban.com/news/detail-748677.html

到了这里,关于Redis管道的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis在云服务器上的安装与客户端连接配置

    yum 安装 redis,使用以下命令,直接将 redis 安装到 linux 服务器: yum -y install redis 启动 redis使用以下命令,以后台运行方式启动 redis: redis-server /etc/redis.conf 操作 redis,使用以下命令启动 redis 客户端: redis-cli 具体操作如下图所示: 将 redis 配置文件下载到本地:redis 配置文件

    2024年02月15日
    浏览(57)
  • 银河麒麟服务器v10 sp1 部署 redis 及redis gui 客户端工具

    上一篇:银河麒麟服务器v10 sp1 redis开机自动启动_csdn_aspnet的博客-CSDN博客 本文介绍另一种redis安装方式及客户端工具安装。 Redis 是一种内存数据模型存储,可用作数据库、缓冲区和消息传递中继。它是开源的(BSD 许可)。字符串、散列、列表、集合、具有范围搜索的排序集

    2024年02月11日
    浏览(43)
  • 三:基于TCP的服务端/客户端

    其中四层模型说的就是TCP(UDP)/IP协议栈 并列图片 listen详解 当客户端发送连接请求时,并不一定能立即连接到。尽管此时服务端处于等待连接请求状态(listen),但是由于系统正忙,此连接请求需要进入连接请求等待队列,listen第二个参数便是设置此等待队列的大小。 accept函数

    2024年01月20日
    浏览(34)
  • day-03 基于TCP的服务器端/客户端

    TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种常见的传输层协议,用于在计算机网络中提供可靠的数据传输。 1.TCP: 连接导向 :TCP是一种面向连接的协议,通信双方在数据传输前需要先建立可靠的连接。 可靠性 :TCP提供可靠的数据传输,通过使用序列号、确

    2024年02月10日
    浏览(51)
  • day-04 基于UDP的服务器端/客户端

    UDP套接字具有以下特点: 无连接性 :UDP是一种无连接的协议,这意味着在发送数据之前,不需要在发送方和接收方之间建立连接。每个UDP数据包都是独立的,它们可以独立地发送和接收,而不需要维护连接状态。 不可靠性 :UDP是一种不可靠的协议,这意味着它不提供数据传

    2024年02月11日
    浏览(35)
  • 一种不需要客户端ip的命令行远程工具

    项目地址:Academy remote system: 一种不需要客户端ip的命令行远程工具 - Gitee.com 项目介绍: 传统的远程命令行工具如ssh,scp都需要目标服务器的ip才可以连接。 我设计的这款命令行远程工具可以基于多个中间服务器进行远程,而不需要设置目标ip。 部分代码(20240317年更新)

    2024年03月20日
    浏览(32)
  • Java 客户端调用 WebService 接口的一种方式

      通过SoapUI创建一个SOAP Project;   项目名称自定义,WSDL地址维护WebService接口地址。点击OK即可   项目创建完成后,展开WebService项,可以看到具体的接口,打开接口下的Request,右侧面板Form标签下可以清晰的看到请求入参,点击Submit请求按钮可以看到Overview标签下的响应结

    2024年01月18日
    浏览(37)
  • Linux 基于 TCP 协议的简单服务器-客户端应用

    目录 一、相关函数  1、listen() 2、accept() 3、connect()  4、两种IP地址转换方式  5、TCP和UDP数据发送和接收函数对比 5、log.hpp自定义记录日志 二、udp_server.hpp单进程版本 三、tcp_server.cc 四、Telnet客户端(代替tcp_client.cc) 五、多进程实现udp_server.hpp 1、多进程版本一 2、tcp_client.

    2024年04月27日
    浏览(37)
  • C++实现websocket服务端客户端(基于boost,亲测可行!)

       整篇文章基本参考了https://blog.csdn.net/jianghuan0122/article/details/123528907,文章记录了如何在现有条件下实现该参考示例(参考示例存在报错,并且参考示例没有介绍环境安装,正确源码附于文末)    自身环境:ubuntu18.04+gcc7.5.0+boost1.7,3   gcc或者g++一般都有,这里主要介绍

    2024年02月11日
    浏览(32)
  • 基于智能手机的医院服务客户端设计与实现(论文+源码)_kaic

    摘  要 近年来,随着中国经济的迅猛发展,医疗技术水平也在不断提高,但由于人口数目巨大,导致医疗资源人均分配不足的情况依旧十分严峻。预约挂号一直是制约医疗机构服务质量提高的主要环节之一。在传统预约挂号方式下,繁琐的预约挂号流程和医疗信息不透明给就

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包