分布式锁的实现方案
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 |
说明第二个实例没有拿到锁,证明了分布式锁的存在