IO Costs of Redis Multi/Exec



我想向Redis发送一个multi/exec命令,如下所示:

redis 127.0.0.1:6379> MULTI
OK
redis 127.0.0.1:6379> LPUSH "JIMMY" "ABC"
QUEUED
redis 127.0.0.1:6379> LRANGE "JIMMY" 0 -1
QUEUED
redis 127.0.0.1:6379> EXEC

不过,我想了解一下网络I/O成本。看起来会有4次往返,尽管我认为Redis会保持连接畅通?

在一个块中发送所有这些命令不是更快吗?有可能做到吗?

是的,这是可能的,这被称为流水线。在发送下一个命令之前,您不必等待服务器应答,除非您需要上一个命令的结果(即存在数据依赖关系)。之后,您将按顺序收到服务器回复。您的示例中的命令可以在一个TCP数据包中发送,开销尽可能小。

您也可以将EVAL与LUA脚本一起使用,命令在服务器上执行:

eval "redis.call('lpush',KEYS[1],'abc'); return redis.call('lrange',KEYS[1],'0','-1');" 1 JIMMY

最新更新