首页 > 数据库 >12_redis管道

12_redis管道

时间:2024-03-12 11:22:42浏览次数:31  
标签:pipeline 12 redis 命令 管道 执行 服务端

redis管道

redis是一个基于客户-服务器模式以及请求/相响应协议的TCP服务。一个请求会遵循以下步骤:

  1. 客户端向服务器发送命令分为四步(发送命令->命令排队->命令执行->返回结果),并监听socket返回,通常以阻塞的模式等待服务端响应。
  2. 服务端处理完命令,并将结果返回给客户端。

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

管道(pipeline)可以一次性发送多条命令给服务端,服务端依次处理完毕后,通过一条响应将结果返回,通过减少客户端与redis的通信次数来实现降低往返延迟时间。pipeline实现的原理是队列,FIFO的特性就保证数据的顺序性。

具体操作

  1. 首先创建一个命令清单cmd.txt

    set k100 v100

    set k200 v200

    hset k300 name lily

    hset k300 ahe 24

    hset k300 gender male

    lpush list 1 2 3 4 5

  2. 在非redis终端下(linux终端下),执行如下命令:

    cat cmd.txt | redis-cli -a passwd --pipe
    

redis管道命令

Pipeline与原生批量命令的对比

  • pipeline是非原子性的,而原生命令是原子性的
  • 原生命令一次只能执行一条命令,pipeline可以一次性执行多条命令
  • 原生命令是服务器端实现的,而pipeline是需要服务器端和客户端共同完成的

Pipeline与事务对比

  • 事务具有原子性,管道不具有原子性
  • 管道是一次性将多条命令发送到服务器,事务是一条一条的发送,事务只有在接收到exec命令后立刻执行,管道则不会
  • 执行事务时会阻塞其他命令。而执行管道的命令时不会阻塞其他命令

使用Pipeline注意事项

  • pipeline缓冲区的指令只是会依次执行,不保证原子性,如果执行中指令发生异常,将会继续执行后续的指令
  • 使用pipeline组装的命令个数不要太多,不然数据量过大导致客户端阻塞的时间太长,同时服务端也只能被迫回复一个队列答复,占用很多内存

标签:pipeline,12,redis,命令,管道,执行,服务端
From: https://www.cnblogs.com/lilyflower/p/18067902

相关文章

  • 用Python编写自己的微型Redis
    building-a-simple-redis-server-with-python前几天我想到,写一个简单的东西会很整洁 雷迪斯-像数据库服务器。虽然我有很多WSGI应用程序的经验,数据库服务器展示了一种新颖挑战,并被证明是学习如何工作的不错的实际方法Python中的套接字。在这篇文章中,我将分享我在此过程中......
  • redis自学(16)select
    Selectselect是Linux中最早的I/O多路复用实现方案:  nfds是FD遍历的一个上限,遍历到这个值的时候,就意味着不用再往后去遍历了。fds_bits是存储1024个比特位,代表1024个fd,这个数量是__d_mask四个字节共32个比特位乘以fds_bits的32长度得到的Select的执行流程:  根据fd......
  • Jackson Redisson反序列化问题
    异常信息com.fasterxml.jackson.databind.exc.MismatchedInputException:Cannotconstructinstanceof`java.util.concurrent.atomic.AtomicInteger`(althoughatleastoneCreatorexists):noint/Int-argumentconstructor/factorymethodtodeserializefromNumberva......
  • redisson序列化采坑那些事儿
    前言如果对springcloud-gateway有了解的同学,应该会知道springcloud-gateway默认提供了一个基于内存的路由定义仓库。org.springframework.cloud.gateway.route.InMemoryRouteDefinitionRepository基于内存的好处,就是快,但是缺点就是网关重启路由就丢失了。为了方便管理网关路由......
  • 2024.03.12
         第5天所花时间(包括上课)2h代码量(行)140行博客量(篇)1篇学习到的知识点页面的跳转,和注册页面,登录页面的构建       packagecom.example.myapplication1;importandroidx.appcompat.app.AppCompatActivity;importandroid.an......
  • 12_享元模式
    享元模式是一种结构型设计模式,它通过共享细粒度的对象来最大限度地减少内存使用和对象创建的数量。享元模式通过将共享对象的状态外部化,使得对象可以共享,并提供了一个工厂类来管理共享对象的创建和获取。享元模式有五个主要角色:享元接口(Flyweight):定义了共享对象的接口,包含了需......
  • Redis稳定性之战:AOF日志支撑数据持久化
    ★Redis24篇集合1介绍AOF(AppendOnlyFile)持久化:以独立日志的方式存储了Redis服务器的顺序指令序列,并只记录对内存进行修改的指令。当Redis服务发生雪崩等故障时,可以重启服务并重新执行AOF文件中的指令达到恢复数据的目的。也就是说,通过重放(replay),来重新建立Redis当前实......
  • Redis安装之集群-哨兵模式(sentinel)模式
    官网说明:https://redis.io/docs/management/sentinel/一、背景Redis主从复制模型在一定程度上解决了读写分离、容灾恢复、数据备份、水平扩容支撑高并发的问题,但仍存在单点故障问题,即Mater宕机后,集群将无法提供写服务。二、方案原理主从复制的问题在于Mater宕机后,Slave......
  • 3月12日 新榜情报
    3月12日新榜情报1.抖音2023年短剧付费用户增长超3倍,日均播放量同比增长100%2.抖音55场“超值天团”直播助力抖音商城38好物节3.快手校园联合快手美妆举办“开学爆改挑战”线下路演活动4.快手健康举办“关爱她健康”主题活动5.B站首页现可跳转淘宝直播间6.董宇辉带货华为总......
  • php反序列化和redis未授权
    1、centos系统安装http,php,redis服务更新yum源httpphpredis2、使用redis未授权漏洞写入phpinfo3、配合gopher协议ssrf漏洞向服务器写入任意数据4、演示ssh免密码登录5、画图解释PHP反序列化漏洞的原理6、预习一下java反序列化漏洞,包括继承,重写等概念......