Redisson
是一个在Redis
的基础上实现的驻内存数据网格。它不仅提供了一系列的分布式的常用对象,还提供了许多分布式服务,其中就包含了各种分布式锁的实现。
官网地址: https://redisson.org
GitHub
地址: https://github.com/redisson/redisson
分布式锁应用场景
提升处理效率:
- 避免重复任务的执行,减少系统资源的浪费(例如幂等场景)。
保障数据一致性:
- 在多个微服务并发访问时,避免出现访问数据不一致的情况,造成数据丢失更新等情况。
以下是不同客户端并发访问时的场景:
分布式锁原理
可重入实现:
Redisson
实现可重入采用Hash
的结构,在Key
的位置记录锁的名称。
Field
的位置记录线程标识,Value
的位置则记录锁的重入次数。加锁时,如果线程标识是自己,则锁的重入次数加 1,并重置锁的有效期。
释放锁时,重入次数减 1,并判断是否为 0,如果为 0 直接删除,否则重置锁的有效期。
重试与WatchDog
流程: