Redis的应用--分布式锁

Redis

文章目录

  • Redis
    • 应用
      • 分布式锁
        • 解决方案

应用

分布式锁

  1. 互斥
  2. 死锁
  3. 容错

解决方案

  1. 正常使用redis的nx数据,下面的语句,key使用对应的前缀+主键,value使用一个随机值UUID,超时时间设置为30秒。
set key value nx 30

解锁:使用lua脚本,获取key值,判断和原先存起来的随机值相同吗,相同就删除,不相同表示redis中的这条数据不是你插入的,就不能删

  1. 基于Redis的RedLock,需要在集群环境中进行,同样的操作,但是需要保证同时在集群一半以上的机器上加上锁,才算是加锁成功。解锁同样
  2. 基于Zookeeper,设置一个临时节点(在自己的机器挂掉之后,会自动删除这个节点),设置成功就加锁,设置不成功这设置一个监听器,监听这个节点删除的事件
设置不成功这设置一个监听器,监听这个节点删除的事件

设置不成功,加一个CountDownLatch阻塞线程
监听器中释放CountDownLatch

你可能感兴趣的:(redis,架构)