【问题标题】:Redis multiple calls vs lua scriptRedis 多次调用 vs lua 脚本
【发布时间】:2021-10-27 02:00:14
【问题描述】:

我有以下用例。

  • 用值设置键
  • 如果密钥已经退出,则获取密钥,否则将其设置为过期。

基本上,我正在尝试用 nx 做一组并得到。这是我想出的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 脚本的任何优点或缺点。或者应该两个单独的命令更好。

【问题讨论】:

    标签: redis lua


    【解决方案1】:

    是的,你应该使用脚本。

    如果您使用两个单独的 Redis 命令,那么您最终会遇到竞争条件:另一个进程可能会在您的 GET 和您的 SETEX 之前设置值,从而导致您覆盖它。您的逻辑要求这个命令序列是原子的,而在 Redis 中做到这一点的最佳方法是使用 Lua 脚本。

    可以通过使用MULTIWATCH 在不使用脚本的情况下实现此目的,但Lua 脚本要简单得多。

    【讨论】:

    • 还有 Lua 脚本,可以节省往返时间。
    • Lua 目前为 +1,因为它必须是一个原子过程。寻找 Redis 7,它将通过使用 NXGET args 的单个 SET 命令解决它。
    猜你喜欢
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 2021-04-15
    • 2017-06-05
    • 1970-01-01
    • 2016-05-20
    • 2013-09-29
    • 1970-01-01
    相关资源
    最近更新 更多