单线程的redis为何要用multi,exec和pipeline两套批量指令

Redis MULTI与EXEC命令解析
本文探讨了Redis中MULTI与EXEC命令的作用及其与pipeline的区别。MULTI确保指令集完整执行不受干扰,而pipeline则逐段执行。文章还讨论了这两种机制在指令分批发送时的不同行为。

众所周知,redis是单线程的。

多个客户端发来的所有指令会按接受到的顺序一个个的执行。

那么multi,exec的作用是什么呢?和pipeline区别在哪?

如果只是简单的认为,multi可以在客户端打包要执行的命令批量的提交到服务端,从而减少每条指令每次发送的网络通讯。那么和pipeline有何区别?

然而redis是单线程的。这两套指令看起来没有什么区别。

从定义上可以得知multi指令的用途是保证multi和exec之间的所有指令不被其他客户端的指令打扰的一个个执行。

pipeline会被打扰吗?在单线程模式下,没有理由认为会被打扰,除非redis服务端将所有指令入队列后,每次随机的挑选一个出来执行。这样做毫无意义,也会造成不公平问题。

有一个场景,就是如果指令很多,多到需要分多次发送到服务端,这时,pipeline不会等到所有指令到达后一起执行,而是收到一个包就执行这部分指令。

但是服务端收到multi指令后,会一直等到exec指令到达,才将所有的指令一起放入队列执行。

 

转载于:https://www.cnblogs.com/reachlins/p/7614837.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值