Redis多次调用 vs Lua脚本

我有以下使用情况。

  • 用值设置关键字
  • 如果已存在,则获取该密钥并将其设置为到期。

基本上,我正在尝试使用nx和get进行设置。以下是我想出的lua脚本

local v = redis.call('GET', KEYS[1])
if v then
     return v
end
redis.call('SETEX', KEYS[1], ARGV[1], ARGV[2])"

我有点困惑是否应该使用上面的Lua脚本来比较执行两个不同的单独命令(先获取再设置)。

使用lua脚本的优缺点。或者应该使用两个单独的命令。

点赞
用户2395796
用户2395796

是的,你应该使用 Lua 脚本。

如果你使用两个单独的 Redis 命令,那么你就会遇到竞争条件:在你的 GETSETEX 之间,另一个进程可能会设置这个值,导致你覆盖它。你的逻辑需要这一系列命令是原子的,而在 Redis 中实现这一点的最佳方法是使用 Lua 脚本。

使用 MULTIWATCH 也可以实现这一点,但是 Lua 脚本更为直观易懂。

2021-08-27 05:10:27