【发布时间】:2018-01-18 19:11:39
【问题描述】:
我正在尝试在我们的 Rails 应用程序服务器中实现锁定。
如果我想永远获得锁,REDIS.setnx 可以正常工作。但是我想获取过期的锁,基本上我希望锁在一定时间后过期,这样锁就可以再次被免费获取。
从 REDIS 的设置文档中,我认为这是可能的。 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 锁的方法。基本上“SET resource-name anystring NX EX max-lock-time”在 ruby 中等效。
谢谢,
安舒尔
【问题讨论】:
标签: ruby ruby-on-rails-3 redis locking