zoukankan      html  css  js  c++  java
  • redis实现分布式锁

    SETNX key value

    key设置值为value,如果key不存在,这种情况下等同SET命令。 当key存在时,什么也不做。SETNX是”SET if Not eXists”的简写。

    返回值

    Integer reply, 特定值:

    • 1 如果key被设置了
    • 0 如果key没有被设置

    ##例子

    redis> SETNX mykey "Hello"
    (integer) 1
    redis> SETNX mykey "World"
    (integer) 0
    redis> GET mykey
    "Hello"
    redis>

    如果客户端获取锁成功,那么setnx返回1,否则返回0;
    为防止出现死锁,需要SETNX 时设置有效时间,已防止迟持有锁的客户端崩溃时,无法释放锁,形如:
    SETNX lock.foo <current Unix time + lock timeout + 1> 
    为了使这种加锁算法更加的健壮,持有锁的客户端应该总是要检查是否超时,保证使用DEL释放锁之前不会过期,因为客户端故障的情况可能是复杂的,不止是崩溃,还会阻塞一段时间,阻止一些操作的执行,并且在阻塞恢复后尝试执行DEL(此时,该LOCK已经被其他客户端所持有)
  • 相关阅读:
    公共服务领域英文译写规范
    [.NET Core]
    [WebAPI]
    [C#]
    [ES]
    [.Net Core]
    [SourceTree]
    如何使用一个库中不存在的函数
    在使用masm32 rc编译资源文件.rc出现的问题
    MSDN 2005 安装问题
  • 原文地址:https://www.cnblogs.com/yanwei-wang/p/8432079.html
Copyright © 2011-2022 走看看