redis pipeline 是做什么用的

redis pipeline 是做什么用的
最新回答
伤疤像㈠朵鲜花

2024-03-10 04:17:34

Redis本身是一个cs模式的tcp server, client可以通过一个socket连续发起多个请求命令。 每个请求命令发出后client通常会阻塞并等待redis服务端处理,redis服务端处理完后将结果返回给client。

redis的pipeline(管道)功能在命令行中没有,但redis是支持pipeline的,而且在各个语言版的client中都有相应的实
现。 由于网络开销延迟,即算redis server端有很强的处理能力,也由于收到的client消息少,而造成吞吐量小。当client
使用pipelining 发送命令时,redis
server必须部分请求放到队列中(使用内存)执行完毕后一次性发送结果;如果发送的命名很多的话,建议对返回的结果加标签,当然这也会增加使用的内
存;

Pipeline在某些场景下非常有用,比如有多个command需要被“及时的”提交,而且他们对相应结果没有互相依赖,而且对结果响应也无需立即获
得,那么pipeline就可以充当这种“批处理”的工具;而且在一定程度上,可以较大的提升性能,性能提升的原因主要是TCP链接中较少了“交互往返”
的时间。不过在编码时请注意,pipeline期间将“独占”链接,此期间将不能进行非“管道”类型的其他操作,直到pipeline关闭;如果你的
pipeline的指令集很庞大,为了不干扰链接中的其他操作,你可以为pipeline操作新建Client链接,让pipeline和其他正常操作分
离在2个client中。不过pipeline事实上所能容忍的操作个数,和socket-output缓冲区大小/返回结果的数据尺寸都有很大的关系;
同时也意味着每个redis-server同时所能支撑的pipeline链接的个数,也是有限的,这将受限于server的物理内存或网络接口的缓冲能
力。
西风不识相

2022-06-16 07:12:43

Redis的 C - S 架构:
1. 基于客户端-服务端模型以及请求/响应协议的TCP服务
2. 客户端向服务端发送一个请求,并监听处理结果的返回,通常是以阻塞模式等待服务端响应
存在的问题:
1. 如果Redis服务端需要同时处理多个请求,一旦出现网络延迟,那么服务端利用率不高,效率降低
管道pipeline
1. 可以一次性发送多条命令并在执行完后一次性将结果返回
2. pipeline通过减少客户端与Redis的通信次数来实现降低往返延时时间
实现的原理
1. 依托于队列
2. Client可以将多个命令放到一个tcp报文一起发送
3. Server则可以将多条命令的处理结果放到一个tcp报文返回
4. 队列是先进先出,这样就保证数据的顺序性