一、错误的分布式锁
使用 Redis SET 指令实现加锁, 指令满足了当 key 不存在则设置 value,同时设置超时时间,并且满足原子语意。
SET lockKey 1 NX PX expireTime
-
lockKey 表示锁的资源,value 设置成 1。
-
NX:表示只有 lockKey 不存在的时候才能 SET 成功,从而保证只有一个客户端可以获得锁。
-
PX expireTime 设置锁的超时时间,单位是毫秒;也可以使用 EX seconds 以秒为单位设置超时时间。
至于解锁操作,使用 DEL 指令删除。一个分布式锁方案出来了,一气呵成,组员不明觉厉,纷纷竖起大拇指,伪代码如下。
//加锁成功
if(jedis.set(lockKey, 1, "NX", "EX", 10) == 1){
try {
do work //执行业务
} finally {
//释放锁
jedis.del(key