Redis分布式锁的核心思想是通过在Redis中记录一个标记,用来表示锁的状态。
比如通过setnx k v命令来实现加锁,并且需要给key指定一个超时时间以防止死锁,另外v可以为uuid,这样在删除k,也就是释放锁的时候,可以判断一下当前要删除的锁是不是自己所加的,从而避免误删除,同时也需要利用lua脚本来保证原子性。
如果Redis本身是集群的,那么在加锁时就需要在整个集群中加成功,不然只在一个节点上加成功了,那么另外的客户端在其它节点也加成功了,这就达不到加锁的效果。比如RedLock的思想是,加锁时在多个节点同时加,只要超过一半的节点返回加锁成功,才表示分布式锁加成功了。