现在我们采用的系统都是分布式,比如我们Sychnized上锁,因为他是JVM层面的,所以如果是两台机器的话,这时候它就无能为力了,这时候我们可以用Reddisson。
1. 分布式锁的条件
- 互斥性
- 高效性
- 支持阻塞和非阻塞
- 支持公平锁和非公平锁
2. 实现分布式锁的方案
- .数据库实现(乐观锁)
- ZK(借鉴Node的临时顺序节点)
- Redission
3. Redission分布式锁原理
当线程1获取到锁以后,Redission底层有一个watch dog(看门口)会一直检测着,假如现线程1还持有锁,然后就会延长锁时间;这时候线程2来了一个,一直while循环,指导获取到锁;
源码认证:
<T> RFuture<T> tryLockInnerAsync(long leaseTime, TimeUnit unit, long threadId, RedisStrictCommand<T> command) {
internalLockLeaseTime = unit.toMillis(leaseTime);
return commandExecutor.evalWriteA