6|2Redisson
Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Data Grid)。
充分的利用了Redis键值数据库提供的一系列优势,基于Java实用工具包中常用接口,为使用者提供了一系列具有分布式特性的常用工具类。
使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。
同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。
首先感受一下通过Redisson Api使用redis分布式锁。
定义RedissonBuilder,通过redis集群地址构建RedissonClient。
定义RedissonClient类型的Bean。
业务代码里,通过RedissonClient获取分布式锁。
由于对Redisson分布式锁实现原理了解的也不是很透彻,这里推荐一篇文章:Redisson 分布式锁实现分析。
6|3Redisson和RedisLockRegistry对比
-
RedisLockRegistry通过本地锁(ReentrantLock)和redis锁,双重锁实现,Redission通过Netty Future机制、Semaphore (jdk信号量)、redis锁实现。
-
RedisLockRegistry和Redssion都是实现的可重入锁。
-
RedisLockRegistry对锁的刷新没有处理,Redisson通过Netty的TimerTask、Timeout 工具完成锁的定期刷新任务。
-
RedisLockRegistry仅仅是实现了分布式锁,而Redisson处理分布式锁,还提供了了队列、集合、列表等丰富的API。
7|0动手实现分布式锁
===================
7|1实现原理
本地锁(ReentrantLock)+ redis锁
7|2获取锁lua脚本