Redis中Lua脚本与Multi/Exec

Redis中Lua脚本与Multi/Exec,redis,lua,transactions,atomic,Redis,Lua,Transactions,Atomic,有没有理由在redis中使用lua脚本来实现原子性,而不是使用multi/exec样式的事务 我看到一些实现在需要原子性时特别选择lua脚本,但在multi/exec中不一样吗?或者这只是一个首选项吗?当您需要在一个操作的结果中使用lua时,lua非常有用(也是唯一的方法)。当您使用MULTI/EXEC时,您将在事务结束时以数组的形式获得结果。事务中间没有使用中间响应。 假设您有一个列表,您可以LPOP一个元素,并使用该元素名称作为IBCRBY其他元素的键。您不能以事务方式在MULTI/EXEC

有没有理由在redis中使用lua脚本来实现原子性,而不是使用multi/exec样式的事务

我看到一些实现在需要原子性时特别选择lua脚本,但在multi/exec中不一样吗?或者这只是一个首选项吗?

当您需要在一个操作的结果中使用lua时,lua非常有用(也是唯一的方法)。当您使用
MULTI
/
EXEC
时,您将在事务结束时以数组的形式获得结果。事务中间没有使用中间响应。

假设您有一个列表,您可以
LPOP
一个元素,并使用该元素名称作为
IBCRBY
其他元素的键。您不能以事务方式在
MULTI/EXEC
中执行此操作(如果修改了监视的密钥,您可能会与它们一起使用失败)。在开始事务之前,您需要给出/知道所有必需的参数。当您
分配
该值时,它将不是服务器端,而是客户端,这可能会导致赛车状况

在LUA(with)中,您可以执行以下任务

local elt = redis.call('LPOP', KEYS[1])
local result = redis.call('INCRBY', elt, 2);

return result 
在某些情况下,“选择”其中任何一个都可能是一种选择,但在某些情况下,您需要LUA。

当您需要将一个操作的结果用于另一个操作时,LUA是有用的(也是唯一的方法)。当您使用
MULTI
/
EXEC
时,您将在事务结束时以数组的形式获得结果。事务中间没有使用中间响应。

假设您有一个列表,您可以
LPOP
一个元素,并使用该元素名称作为
IBCRBY
其他元素的键。您不能以事务方式在
MULTI/EXEC
中执行此操作(如果修改了监视的密钥,您可能会与它们一起使用失败)。在开始事务之前,您需要给出/知道所有必需的参数。当您
分配
该值时,它将不是服务器端,而是客户端,这可能会导致赛车状况

在LUA(with)中,您可以执行以下任务

local elt = redis.call('LPOP', KEYS[1])
local result = redis.call('INCRBY', elt, 2);

return result 
在某些情况下,“选择”其中任何一个都是一种选择,但在某些情况下,您需要LUA