# redis-distributed-lock
> redis分布式锁工具包,提供纯Java方式调用,支持传统Spring工程,
> 为spring boot应用提供了starter,更方便快捷的调用。
## 项目结构
[redis-distributed-lock-core](http://wuwenliang.net/2018/07/08/%E5%88%86%E5%B8%83%E5%BC%8F%E9%94%81%E7%9A%84%E5%A4%9A%E7%A7%8D%E5%AE%9E%E7%8E%B0/) 原生redis分布式锁实现,支持注解,不推荐项目中使用,仅供学习使用
redis-distributed-lock-demo-spring redis-distributed-lock-core 调用实例,仅供学习
[redis-distributed-lock-starter](./redis-distributed-lock-starter/readme.md) 基于Redisson的分布式锁spring starter实现,可用于实际项目中
[redis-distributed-lock-starter-demo](./redis-distributed-lock-starter-demo/readme.md) redis-distributed-lock-starter调用实例
## 文档
### springboot应用(直接编程方式)
0. 配置文件application.properties中引入
redisson.lock.server.address=127.0.0.1:6379
redisson.lock.server.type=standalone
1. 针对springboot应用只需要引入依赖
<!--分布式锁redisson版本-->
<dependency>
<groupId>com.snowalker</groupId>
<artifactId>redis-distributed-lock-starter</artifactId>
<version>1.0.0</version>
</dependency>
2. 直接编程方式调用如下,在需要加锁的定时任务中,注入 **RedissonLock** 实体,即可进行加锁、解锁等操作。
<br/>锁自动释放时间默认为10秒,这个时间需要你根据自己的业务执行时间自行指定。
@Autowired
RedissonLock redissonLock;
@Scheduled(cron = "${redis.lock.cron}")
public void execute() throws InterruptedException {
if (redissonLock.lock("redisson", 10)) {
LOGGER.info("[ExecutorRedisson]--执行定时任务开始,休眠三秒");
Thread.sleep(3000);
System.out.println("=======================业务逻辑=============================");
LOGGER.info("[ExecutorRedisson]--执行定时任务结束,休眠三秒");
redissonLock.release("redisson");
} else {
LOGGER.info("[ExecutorRedisson]获取锁失败");
}
}
3. 你可以改变测试demo的端口,起多个查看日志,能够看到同一时刻只有一个实例获取锁成功并执行业务逻辑
2018-07-10 23:00:12.810 |-INFO [main] org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer [198] -| Tomcat started on port(s): 8888 (http)
2018-07-10 23:00:12.814 |-INFO [main] com.snowalker.RedisDistributedLockStarterDemoApplication [57] -| Started RedisDistributedLockStarterDemoApplication in 2.684 seconds (JVM running for 3.038)
2018-07-10 23:00:15.033 |-INFO [pool-3-thread-1] com.snowalker.lock.redisson.RedissonLock [35] -| 获取Redisson分布式锁[成功],lockName=redisson
2018-07-10 23:00:15.034 |-INFO [pool-3-thread-1] com.snowalker.executor.ExecutorRedissonNormal [27] -| [ExecutorRedisson]--执行定时任务开始,休眠三秒
=======================业务逻辑=============================
2018-07-10 23:00:18.035 |-INFO [pool-3-thread-1] com.snowalker.executor.ExecutorRedissonNormal [30] -| [ExecutorRedisson]--执行定时任务结束,休眠三秒
2018-07-10 23:00:20.005 |-INFO [pool-3-thread-1] com.snowalker.lock.redisson.RedissonLock [35] -| 获取Redisson分布式锁[成功],lockName=redisson
2018-07-10 23:00:20.006 |-INFO [pool-3-thread-1] com.snowalker.executor.ExecutorRedissonNormal [27] -| [ExecutorRedisson]--执行定时任务开始,休眠三秒
=======================业务逻辑=============================
### springboot应用(注解方式)
1. 前提条件同样是要引入依赖
<!--分布式锁redisson版本-->
<dependency>
<groupId>com.snowalker</groupId>
<artifactId>redis-distributed-lock-starter</artifactId>
<version>1.0.0</version>
</dependency>
2. 注解方式调用如下,在需要加锁的定时任务的执行方法头部,添加 **@DistributedLock(value = "redis-lock", expireSeconds = 11)**
即可进行加锁、解锁等操作。<br/>锁自动释放时间默认为10秒,这个时间需要你根据自己的业务执行时间自行指定。
<br/>我这里以spring schedule定时任务为例,用其他的定时任务同理,只需要添加注解。
@Scheduled(cron = "${redis.lock.cron}")
@DistributedLock(value = "redis-lock", expireSeconds = 11)
public void execute() throws InterruptedException {
LOGGER.info("[ExecutorRedisson]--执行定时任务开始,休眠三秒");
Thread.sleep(3000);
System.out.println("=======================业务逻辑=============================");
LOGGER.info("[ExecutorRedisson]--执行定时任务结束,休眠三秒");
}
3. 你可以改变测试demo的端口,起多个查看日志,能够看到同一时刻只有一个实例获取锁成功并执行业务逻辑
2018-07-11 09:48:06.330 |-INFO [main] com.snowalker.RedisDistributedLockStarterDemoApplication [57] -| Started RedisDistributedLockStarterDemoApplication in 3.901 seconds (JVM running for 4.356)
2018-07-11 09:48:10.006 |-INFO [pool-3-thread-1] com.snowalker.lock.redisson.annotation.DistributedLockHandler [32] -| [开始]执行RedisLock环绕通知,获取Redis分布式锁开始
2018-07-11 09:48:10.622 |-INFO [pool-3-thread-1] com.snowalker.lock.redisson.RedissonLock [35] -| 获取Redisson分布式锁[成功],lockName=redis-lock
2018-07-11 09:48:10.622 |-INFO [pool-3-thread-1] com.snowalker.lock.redisson.annotation.DistributedLockHandler [39] -| 获取Redis分布式锁[成功],加锁完成,开始执行业务逻辑...
2018-07-11 09:48:10.625 |-INFO [pool-3-thread-1] com.snowalker.executor.ExecutorRedissonAnnotation [22] -| [ExecutorRedisson]--执行定时任务开始,休眠三秒
=======================业务逻辑=============================
2018-07-11 09:48:13.625 |-INFO [pool-3-thread-1] com.snowalker.executor.ExecutorRedissonAnnotation [25] -| [ExecutorRedisson]--执行定时任务结束,休眠三秒
2018-07-11 09:48:13.627 |-INFO [pool-3-thread-1] com.snowalker.lock.redisson.annotation.DistributedLockHandler [46] -| 释放Redis分布式锁[成功],解锁完成,结束业务逻辑...
2018-07-11 09:48:13.628 |-INFO [pool-3-thread-1] com.snowalker.lock.redisson.annotation.DistributedLockHandler [50] -| [结束]执行RedisLock环绕通知
## application.properties配置方式(yaml同理)
### redisson分布式锁配置--单机
redisson.lock.server.address=127.0.0.1:6379
redisson.lock.server.type=standalone
redisson.lock.server.password=
redisson.lock.server.database=1
### redisson分布式锁配置--哨兵
**redisson.lock.server.address** 格式为: sentinel.conf配置里的sentinel别名,sentinel1节点的服务IP和端口,sentinel2节点的服务IP和端口,sentinel3节点的服务IP和端口
<br/>比如sentinel.conf里配置为sentinel monitor my-sentinel-name 127.0.0.1 6379 2,那么这里就配置my-sentinel-name
redisson.server.address=my-sentinel-name,127.0.0.1:26379,127.0.0.1:26389,127.0.0.1:26399
redisson.server.type=sentinel
redisson.lock.server.password=
redisson.lock.server.database=1
### redisson分布式锁配置--集群方式
cluster方式至少6个节点(3主3从,3主做sharding,3从用来保证主宕机后可以高可用)
<br/>地址格式为: 127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382,127.0.0.1:6383,127.0.0.1:6384
没有合适的资源?快使用搜索试试~ 我知道了~
redis分布式锁工具包,提供纯Java方式调用,支持传统Spring工程.zip
共62个文件
java:34个
properties:9个
xml:5个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 149 浏览量
2024-02-08
21:42:06
上传
评论
收藏 77KB ZIP 举报
温馨提示
快应用开发
资源推荐
资源详情
资源评论
收起资源包目录
redis分布式锁工具包,提供纯Java方式调用,支持传统Spring工程.zip (62个子文件)
redis-distributed-lock-master
pom.xml 718B
LICENSE 11KB
redis-distributed-lock-demo-spring
pom.xml 4KB
src
test
java
com
snowalker
AppTest.java 285B
main
resources
application-test.properties 3KB
application.properties 106B
application-prod.properties 3KB
redis.properties 842B
banner.txt 465B
application-dev.properties 768B
META-INF
spring-devtools.properties 46B
java
com
snowalker
executor
ExecutorA.java 855B
ExecutorB.java 1KB
ExecutorRedisson.java 1KB
AlipayGatewayServerBootstrap.java 2KB
redis-distributed-lock-starter-demo
mvnw.cmd 5KB
pom.xml 2KB
src
test
java
com
snowalker
RedisDistributedLockStarterDemoApplicationTests.java 355B
main
resources
application.properties 1KB
java
com
snowalker
executor
ExecutorRedissonNormal.java 1KB
ExecutorRedissonAnnotation.java 1013B
RedisDistributedLockStarterDemoApplication.java 541B
readme.md 17B
mvnw 6KB
.gitignore 268B
redis-distributed-lock-core
pom.xml 5KB
src
test
java
com
snowalker
AppTest.java 285B
main
java
com
snowalker
annotation
RedisLock.java 329B
handler
RedisLockHandler.java 2KB
util
PropertiesUtil.java 1KB
lock
DistributedLock.java 348B
RedisDistributedLock.java 5KB
redisson
RedissonLock.java 1KB
RedissonManager.java 2KB
config
RedisPoolUtil.java 2KB
RedisPool.java 3KB
readme.md 1KB
conf
redis.properties 833B
.gitignore 299B
README.md 9KB
redis-distributed-lock-starter
mvnw.cmd 5KB
pom.xml 4KB
src
main
resources
META-INF
spring.factories 123B
java
com
snowalker
lock
redisson
constant
RedisConnectionType.java 966B
GlobalConstant.java 630B
annotation
DistributedLock.java 471B
DistributedLockHandler.java 2KB
RedissonLock.java 2KB
RedissonManager.java 4KB
config
RedissonAutoConfiguration.java 2KB
RedissonProperties.java 1KB
EnableRedissonLock.java 383B
strategy
RedissonConfigStrategy.java 485B
RedissonConfigContext.java 848B
SentinelRedissonConfigStrategyImpl.java 2KB
ClusterRedissonConfigStrategyImpl.java 2KB
StandaloneRedissonConfigStrategyImpl.java 1KB
MasterslaveRedissonConfigStrategyImpl.java 2KB
readme.md 1KB
mvnw 6KB
.gitignore 268B
conf
application.properties 2KB
共 62 条
- 1
资源评论
博士僧小星
- 粉丝: 1934
- 资源: 5894
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功