我们可以在redis的lua脚本中执行管道吗

我们可以在redis的lua脚本中执行管道吗,lua,redis,Lua,Redis,比如说 我有几个set命令,我不关心它们的返回值,在我的lua脚本中,我必须编写几个redis.call('set',key,val) 有没有像管道这样的方法,我可以一起做。也许效率更高?使用如何 否-无法从Lua脚本管道化或批处理Redis调用。请注意,调用redis.call是非常有效的,因此您不必为此担心太多 正如@deltheil所指出的,如果使用同一命令的可变形式,则可以将多个调用“分组”。虽然对于Lua脚本来说不太重要,但这绝对是推荐的做法。尽管纠正了这个答案,但忽略了一个重要的问题

比如说

我有几个
set
命令,我不关心它们的返回值,在我的lua脚本中,我必须编写几个
redis.call('set',key,val)

有没有像管道这样的方法,我可以一起做。也许效率更高?

使用如何


否-无法从Lua脚本管道化或批处理Redis调用。请注意,调用redis.call是非常有效的,因此您不必为此担心太多


正如@deltheil所指出的,如果使用同一命令的可变形式,则可以将多个调用“分组”。虽然对于Lua脚本来说不太重要,但这绝对是推荐的做法。

尽管纠正了这个答案,但忽略了一个重要的问题:您不能从Lua脚本进行管道传输,因为它没有任何意义。Redis LUA脚本执行是原子的,因为Redis是单线程的,所以在执行脚本时不能执行其他Redis命令,这使得LUA脚本中对管道的任何需求都是多余和无用的。我认为
Redis.call
肯定会带来一些开销,因此,将多个调用组合到一个调用中应该可以提高性能。没错,但是redis.call在redis中实现的方式(即使用假客户端)使得支持流水线变得不可能。。。在任何情况下,Lua/redis.call的开销都出人意料地微不足道。每当您想要更改某些内容以“更高效”时,请首先确保以下两件事:是否存在性能问题?我能有效地衡量变更前后的绩效吗?试图优化而不能回答这两个问题是浪费精力的。
$ redis-cli 
127.0.0.1:6379> eval 'redis.call("mset", "foo", "bar", "scm", "git", "test", "ok")' 0
(nil)
127.0.0.1:6379> get foo
"bar"
127.0.0.1:6379> get scm
"git"
127.0.0.1:6379> get test
"ok"