介绍
需要多个Redis节点,三个以上的节点(之间没有任何关系,独立)
当我们客户端发送setnx命令,会导致所有的节点进行执行,当有半数以上的redis节点加锁成功才算成功;
当客户端2来的时候进来向我们的服务端发送setnx命令,此时3个节点已经有两个节点被锁了,所以加锁失败;
问题:
1.当我们三个节点或者多个节点是主从架构时,还是会出现丢数据的情况,比如主+key,写成功了,但是主从同步,从机还没拿到数据主机就挂了,这时候从机上去没有key,又可以拿到锁了
——>所以我们用redlock,可以用多个实例
2.当我们AOF持久化时,假如说1s一次持久化可能出现宕机情况,那么1s内如果有加锁就会丢失,那么下一次请求又能加锁