gpt4 book ai didi

带有 EX 和 NX 的 Ruby REDIS

转载 作者:IT王子 更新时间:2023-10-29 06:08:54 28 4
gpt4 key购买 nike

我正在尝试在我们的 Rails 应用程序服务器中实现锁定。

如果我想永远获取锁,REDIS.setnx 工作正常。但是我想获取过期的锁,基本上我希望锁在一定时间后过期,以便可以再次免费获取锁。

从REDIS的set documentation,我看到这是可能的。 https://redis.io/commands/set“命令 SET resource-name anystring NX EX max-lock-time 是使用 Redis 实现锁定系统的简单方法。”

如何在 ruby​​ 中实现它。命令:

REDIS = Redis.new(host: ENV['REDIS_HOST'], port: ENV['REDIS_PORT'])
REDIS.set "key", "value", "nx", "ex", 3600

抛出错误:

ArgumentError: wrong number of arguments (given 5, expected 2..3)

还有另一种方法可以做到这一点,但它需要两次 REDIS 调用。

if(REDIS.setnx "key", "value")
REDIS.setex "key", 3600, "value"
end

这种方法不是首选。我正在寻找一种通过 ruby​​ 中的单个 REDIS 调用来获取 REDIS 锁的方法。基本上等同于 ruby​​ 中的“SET resource-name anystring NX EX max-lock-time”。

谢谢,

安舒尔

最佳答案

看起来这是在 v3.2.2 的 Redis(the gem) 中添加的,see PR 547 .它应该像标志一样使用,而不是作为裸字符串使用,see test .

r.set("foo", "qux", :nx => true)

这让我相信你应该能够做到这一点:

r.set("foo", "qux", :nx => true, :ex => 2.hours)

关于带有 EX 和 NX 的 Ruby REDIS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48318207/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com