Redis Multi / Exec的IO成本

时间:2013-08-09 13:47:27

标签: redis

我想向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成本。虽然我认为Redis会保持联系开放,但似乎会有4次旅行和后退和前进?

在一个块中发送所有这些命令会不会更快?甚至可以这样做吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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