我正在尝试从redis事务页面运行代码。具体而言,本部分:
WATCH zset
element = ZRANGE zset 0 0
MULTI
ZREM zset element
EXEC
如果我尝试从cli逐行执行此操作,我会得到以下结果:
localhost:6380> zadd set 1 a
(integer) 1
localhost:6380> WATCH zset
localhost:6380> element = ZRANGE zset 0 0
(error) ERR unknown command 'element'
OK
这可能意味着我做错了什么?我记得9年前和lua一起工作过,所以在我看来这也不像lua。
有人是怎么运行这个代码段的?只是某种伪代码吗?
2条答案
按热度按时间kognpnkq1#
是的,这是某种伪代码。
redis-cli
它只接受redis命令,不是一个成熟的编辑器,也不支持直接lua脚本(既不支持element
伪代码中的变量)。我记得9年前和lua一起工作过,所以在我看来这也不像lua。
这不是lua,而是伪代码。实际上,您链接到的redis事务页面根本没有提到lua(这就是@pipeet在您的帖子中的评论有意义的原因)。
但是,可以使用redis的
EVAL
命令。axr492tv2#
正如@dinei所说,给出的例子是伪代码。
让我们看一下(我添加了行号供我们参考):
这个练习的重点是解决如果我们只读取密钥(使用
ZRANGE
,直线2
),然后修改键(使用ZREM
在第4行)。如果我们不使用“cas”语义,我假设您理解这个问题,因此无需深入讨论。正如所指出的,
redis-cli
只是让您能够运行redis命令并查看它们的回复,而不是将值保存在变量中,等等。所以这个例子的想法是
2
,我们正在将“read”操作的结果“保存”到伪变量中element
.然后,排队
4
,我们在“set”操作中使用这个值,当然还有行1
,3
以及5
只是“cas”命令,以确保没有竞争条件。这类命令的实际使用可能是通过redis客户机使用一种编程语言来完成的,这种语言允许我们保存命令的返回值
ZRANGE
然后在以后的工作中使用它ZREM
命令。但如果你想把它放进去
redis-cli
,您会看到,我们假装客户端代码已经读取并保存了"a"
那是从zrange
然后将该值传递给zrem
命令: