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

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 16:45   49   0

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

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

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

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

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

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

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

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

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

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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP