Redis 多次调用 vs lua 脚本
Posted
技术标签:
【中文标题】Redis 多次调用 vs lua 脚本【英文标题】:Redis multiple calls vs lua script 【发布时间】: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 脚本的任何优点或缺点。或者应该两个单独的命令更好。
【问题讨论】:
【参考方案1】:是的,你应该使用脚本。
如果您使用两个单独的 Redis 命令,那么您最终会遇到竞争条件:另一个进程可能会在您的 GET
和您的 SETEX
之前设置值,从而导致您覆盖它。您的逻辑要求这个命令序列是原子的,而在 Redis 中做到这一点的最佳方法是使用 Lua 脚本。
可以通过使用MULTI
和WATCH
在不使用脚本的情况下实现此目的,但Lua 脚本要简单得多。
【讨论】:
还有 Lua 脚本,可以节省往返时间。 Lua 目前为 +1,因为它必须是一个原子过程。寻找 Redis 7,它将通过使用NX
和 GET
args 的单个 SET
命令解决它。以上是关于Redis 多次调用 vs lua 脚本的主要内容,如果未能解决你的问题,请参考以下文章