使用redis-semaphore

时间:2018-06-17 17:29:05

标签: ruby redis semaphore

我正在使用redis-semaphore来锁定我的后台工作:

job = Redis::Semaphore.new(:job, redis: NonBlockingRedis.new(), :stale_client_timeout => 60)
job.lock(-1)
begin
  # Do some work
rescue => e
ensure
  job.unlock
end

在单独的过程中,我会检查作业是否正在运行:

job = Redis::Semaphore.new(:job, redis: NonBlockingRedis.new())
if job.available_count > 0
  # Start the job
end

如果意外重启,redis键不会解锁,而stale_client_timeout就派上用场了。

但是,如果我使用job.available_count来确定是否应该运行某个工作,我就永远无法解锁,因为它会继续返回0

是否有替代available_count考虑​​过时的问题? locked?似乎也无效。

0 个答案:

没有答案