我正在使用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?似乎也无效。