分布式锁

一、什么叫分布式锁

二、分布式锁的用途

三、分布式锁实现的原理

1)分布式锁的实现要求条件

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

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

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

解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。

2)

四、分布式锁实现—redis实现

1)redis实现分布式锁的原理

首先用了redis中的String的数据结构,其中key用来存储这个锁具体的名称和类型,value用来记录是哪个来进行上锁的,这样就保证了互斥性和只有加锁才能解锁的要求,而且对这个设置时间来进行到指定时间自动释放,可以解决死锁的问题。而redis只要可用就保证了容错性问题。在加锁要保证一致性,对于时间的设置和key的设置都要保证是原子性,这样才能保证分布式锁的条件。

redis分布式锁加锁的redis命令

 

redis分布式锁加锁的jedis代码

jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);

redis分布式锁解锁的redis命令

 

redis分布式锁解锁的jedis代码

String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
Object result = jedis.eval(script, Collections.singletonList(lockKey), Collections.singletonList(requestId));

 

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页