分布式锁的实现方案
Spring
早就提供了分布式锁的实现,早期,分布式锁的相关代码存在与Spring Cloud的子项目Spring Cloud Cluster中,后来被迁移到了Spring Integration
中。
Spring Cloud Cluster
的GitHub:https://github.com/spring-cloud/spring-cloud-cluster/
Spring Integration
的GitHub:https://github.com/spring-projects/spring-integration/
官方对于Spring Integration
的说法是 这是一个企业集成模式
的实现。Spring Cloud Stream
的底层也是Spring Integration
。
Spring Integration
提供了多种全局锁,现在我们在这里只介绍基于Redis
的分布式锁
基于
Spring Integration
实现Redis
的分布式锁
1.依赖
1 | <dependency> |
2.Redis
配置
1 | spring: |
3.RedisLock
初始化
1 |
|
org.springframework.integration.redis.util.RedisLockRegistry
的注释详细描述了该类的特性以及使用方式。
4.测试代码
1 | /** |
- 启动1个实例,访问
http://localhost:8080/redisLock/test
,会看到类似如下的日志
1 | 2019-03-26 14:42:28.206 INFO 4913 --- [nio-8080-exec-1] c.r.lock.controller.RedisLockController : b1 is : true |
- 启动2个实例,并迅速访问两个实例的
/test
端点,会在第二个实例上看到类似如下日志
1 | [nio-8081-exec-1] c.r.lock.controller.RedisLockController : b1 is : false |
说明第二个实例没有拿到锁,证明了分布式锁的存在