我正在尝试在rails应用服务器中实现锁定。
REDIS。如果我想永远获得一个锁,setnx工作得很好。但我想获得过期的锁,基本上我希望锁在一定的时间后过期,这样锁就可以自由地再次获得。
从REDIS的set文档中,我看到这是可能的。
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”基本上是等效的。
谢谢
安舒尔