您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Ruby-具有到期实现的基于Redis的互斥锁

Ruby-具有到期实现的基于Redis的互斥锁

如果您使用的是Redis 2.6+,则可以使用Lua脚本引擎更轻松地完成此操作。在Redis的文件说:

Redis脚本在定义上是事务性的,因此您可以使用Redis事务进行任何操作,还可以使用脚本进行操作,通常该脚本会更简单,更快速

实现它很简单:

LUA_ACQUIRE = "return redis.call('setnx', KEYS[1], 1) == 1 and redis.call('expire', KEYS[1], KEYS[2]) and 1 or 0"
def lock(key, timeout = 3600)
  if redis.eval(LUA_ACQUIRE, key, timeout) == 1
    begin
      yield
    ensure
      r.del key
    end
  end
end

用法

lock("somejob") { do_exclusive_job }
其他 2022/1/1 18:14:11 有499人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶