Redisson
使用步骤
- 引入依赖
1 | <dependency> |
- 配置 RedissonClient
1 |
|
- 获取锁
1 | RLock lock = RedissonClient.getLock("order"); |
原理分析
可重入
将存储结构改为 Hash 类型,field 为线程标识,value 为重入次数,记录锁重入的次数并每次重入刷新有效期。
释放锁的时候判断是否重入次数变为0,否则-1
可重试
允许设置 waitTime,在等待时间范围内不断重新获取锁
超时释放
设立 watchdog 任务机制,只要服务还在进行就不停续约,如果服务宕机就会过期释放
联锁
允许使用多个 Redis 节点,必须在所有节点获取到锁才算成功,如果有一个节点宕机即使主从不一致,也无法从一个节点就获取到锁。