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

                                                                                                                                  Redis实现分布式锁

    1.锁的处理

    单应用中使用锁:单进程多线程

    synchroize , Lock

    分布式应用中使用的锁:多进程

    2.分布式锁的实现方式

    数据库的乐观锁

    基于zookeeper的分布式锁

    基于redis的分布式锁

    3.分布式锁的注意事项

    互斥性:在任意时刻,只有一个客户能持有锁

    同一性:加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了

    避免死锁:即使有一个客户端在持有锁的期间奔溃而没有主动解锁,也能保证后续其他客户端能加锁

    4.实现分布式锁

    4.1获取锁

    在SET命令中,有很多选项可用来修改命令的行为,以下是SET命令可用选项的基本语法

    EX seconds -设置指定的到期时间以秒为单位。

    PX milliseconds-设置指定的到期时间(以毫秒为单位)。

    NX -仅在键不存在时设置锁。

    XX-只有在键已存在时才设置。

    方式1(使用set命令实现)

    使用redis的set命令实现获取分布式锁

    @param lockkey 可以就是锁

    @param requestId  请求ID,保证同一性

    @param expireTime 过期时间,避免死

     方式2(使用setnx命令实现)

    4.2释放锁

  • 相关阅读:
    +1和*2
    线段树(区间最大值和最大值的个数)
    CodeForces
    莫队算法入门(暴力而不失优雅)
    二分迷宫
    全错排公式
    C++ PAT乙 1051. 复数乘法 (15)
    C++ PAT乙 1070. 结绳(25)
    C++ PAT乙 1080. MOOC期终成绩 (25)
    C++ PAT 1073. 多选题常见计分法(20)
  • 原文地址:https://www.cnblogs.com/liyalong/p/12247460.html
Copyright © 2011-2022 走看看