Redis-pipeline初相识

背景

今天在调研公司BCD平台Frog的时候,在消费延时队列的时候,碰到了一个名词,pipeline,简单探究一下吧

redis请求原理

Redis其实是一个基于TCP协议的CS架构的内存数据库。所有的操作都是一个request一个response的同步操作。redis每接收到一个命令就会处理一个命令,并同步返回结果。这样带来的问题就是,一个命令就会产生一次RTT,这样的话必然会消耗大量的网络IO。

什么是RTT

redis客户端执行一条命令分4个过程:

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

这个过程称为Round trip time(简称RTT, 往返时间),mget mset有效节约了RTT,但大部分命令(如hgetall,并没有mhgetall)不支持批量操作,需要消耗N次RTT

为了节省网络资源,pipeline应运而生

pipeline原理

多个命令,同时发多个request,不等待上一个命令返回,统一返回结果,节省多次RTT

普通调用和pipeline对比
参考:https://www.jianshu.com/p/d7373487e867
在这里插入图片描述

在这里插入图片描述

pipeline具有原子性吗?

pipeline不能保证命令执行的原子性。如多个命令在执行的中间发生了异常,那么将会丢失未执行的命令。所以我们一般使用pipeline时,需要自己保证执行命令的数据安全性。

redis的简单事务,将一组需要一起执行的命令放到multi和exec两个命令之间,其中multi代表事务开始,exec代表事结束,不支持事务回滚
此处可以参考:https://blog.csdn.net/a1173537204/article/details/103329562

//multi命令
multi
set key1 value1
set key2 value2
exec

pipeline和multi区别

pipeline多个指令打包一次请求服务端,不支持事务,服务端会返回多个指令结果,由客户端整理结果统一返回用户。
multi多个指令多次请求服务端,支持事务,首先开启事务,多次指令请求多次服务端,服务端统一整理结果返回。

猜你喜欢

转载自blog.csdn.net/lbh199466/article/details/107703372