redis中lua脚本与multi/exec的比较

jjhzyzn0  于 2021-06-10  发布在  Redis
关注(0)|答案(1)|浏览(1211)

有没有理由在redis中使用lua脚本来实现原子性,而不是使用multi/exec样式的事务?
我看到一些实现在需要原子性的时候特别选择lua脚本,但是multi/exec不是也一样吗?或者这只是一种偏好?

jpfvwuh4

jpfvwuh41#

当您需要将一个操作的结果用于另一个操作时,lua是有用的(也是唯一的方法)。当你使用 MULTI / EXEC ,则在事务结束时以数组形式获得结果。在事务处理过程中不会使用中间响应。
假设你有一张单子 LPOP 一个元素,并将该元素名称用作 IBCRBY 其他一些。你不能在家里做 MULTI/EXEC (如果修改了被监视的密钥,则可以使用watch和它们一起失败)以事务方式。在开始事务之前,您需要给出/知道所有必需的参数。当你 assign 值,则它将不是服务器端,而是客户端,这可能会导致竞速情况。
在lua中(使用eval),您可以执行以下任务

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

return result

在某些情况下,“选择”它们中的任何一个都可能是一种选择,但在某些情况下,您需要lua。

相关问题