1

我想向 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 次往返和前进?

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

4

2 回答 2

1

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

于 2013-08-09T16:50:53.223 回答
1

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

eval "redis.call('lpush',KEYS[1],'abc'); return redis.call('lrange',KEYS[1],'0','-1');" 1 JIMMY
于 2013-08-09T21:45:40.137 回答