redis分布式锁的实现

为了确保分布式锁可用,我们至少要确保的锁的实现同时满足以下四个条件:

1. 互斥性。在任意时刻,只有一个客户端能持有锁。

2. 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。

3. 具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。

4. 加锁和解锁必须是同一个客户端,客户端A不能解锁客户端B加的锁。


实现思想:

1. 获取锁的时候,使用setnx加锁,并使用expire命令为锁添加一个超时时间,超过该时间则自动释放锁,锁的value值为一个随机生成的UUID,通过此在释放锁的时候进行判断。

2. 释放锁的时候,通过UUID判断是不是该锁,若是该锁,则执行delete进行锁释放。


实现细节:

1. 客户端加锁
set(key, value, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime)

你可能感兴趣的:(redis分布式锁的实现)