Redis Pipeline 原理及注意事项

Pipeline介绍

Pipeline指的是管道技术,指的是客户端允许将多个请求依次发给服务器,过程中而不需要等待请求的回复,在最后再一并读取结果即可。
当client 使用pipelining 发送命令时,redis server必须将部分请求放到队列中(使用内存),执行完毕后一次性发送结果,如果发送的命令很多的话,建议对返回的结果加标签,当然这也会增加使用的内存。

Redis的pipeline(管道)功能在命令行中没有,但redis是支持pipeline的。 由于网络开销延迟,就算redis server端有很强的处理能力,也会由于收到的client消息少,而造成吞吐量小。

Pipeline在某些场景下非常有用,比如有多个command需要被'及时的'提交,而且他们对相应结果没有互相依赖,对结果响应也无需立即获得,那么pipeline就可以充当这种'批处理'的工具;而且在一定程度上,可以较大的提升性能,性能提升的原因主要是TCP连接中减少了'交互往返'的时间

 

Pipeline 与批量操作比较

命令

N个命令操作

1次pipeline(n个命令)

总时间

n次网络交互时间 + n次命令执行时间

1次网络交互时间+n次命令执行时间

数据量

1条命令

n条命令

 

假如有1万次操作,一次网络交互的时长为5ms,一次命令执行时长为0.1ms

批量操作所需总时长为:5*10000 + 0.1*10000 = 51秒                                  #不考虑返回数据量大小的情况

pipeline(每次100)所需要总时长为:5*(10000/100) + 0.1*10000 = 1.5秒    #不考虑返回数据量大小的情况

 

pipeline与原生的M操作的区别

M 操作也是类似 pipeline,将多个命令一次执行,一次发送出去,节省网络时间。对比如下:

1.M操作在Redis队列中是一个原子操作,pipeline不是原子操作

2.pipeline与M操作都会将数据顺序的传送顺序地返回(redis 单线程)

3.M 操作一个命令对应多个键值对,而Pipeline是多条命令

Redis Pipeline 原理及注意事项_第1张图片Redis Pipeline 原理及注意事项_第2张图片

 

pipeline注意事项


1.每次pipeline携带数量不推荐过大,否则会影响网络性能;

2.pipeline每次只能作用在一个Redis节点上;
 

适用场景


       有些系统可能对可靠性要求很高,每次操作都需要立马知道这次操作是否成功,是否数据已经写进redis了,那这种场景就不适合。有的系统,可能是批量的将数据写入redis,允许一定比例的写入失败,那么这种场景就可以使用了,比如10000条一下进入redis,可能失败了2条无所谓,后期有补偿机制就行了,比如短信群发这种场景,如果一下群发10000条,按照第一种模式去实现,那这个请求过来,要很久才能给客户端响应,这个延迟就太长了,如果客户端请求设置了超时时间5秒,那肯定就抛出异常了,而且本身群发短信要求实时性也没那么高,这时候用pipeline最好了。

 

你可能感兴趣的:(Redis,redis)