diff --git a/pom.xml b/pom.xml index 292ae495..9eba5d24 100644 --- a/pom.xml +++ b/pom.xml @@ -36,6 +36,7 @@ 8.0.3 4.1.2 2.6.2 + 3.14.1 @@ -213,6 +214,13 @@ ruoyi-api-system ${ruoyi.version} + + + + org.redisson + redisson-spring-boot-starter + 3.14.0 + diff --git a/ruoyi-common/ruoyi-common-redis/pom.xml b/ruoyi-common/ruoyi-common-redis/pom.xml index e498f15b..0e6457dd 100644 --- a/ruoyi-common/ruoyi-common-redis/pom.xml +++ b/ruoyi-common/ruoyi-common-redis/pom.xml @@ -22,7 +22,12 @@ org.springframework.boot spring-boot-starter-data-redis - + + + org.redisson + redisson-spring-boot-starter + + com.ruoyi diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisLock.java b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisLock.java new file mode 100644 index 00000000..b4209c80 --- /dev/null +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisLock.java @@ -0,0 +1,64 @@ +package com.ruoyi.common.redis.service; + +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.util.concurrent.TimeUnit; + +/** + * redis锁工具类 + * + * @author Mask + */ +@Component +public class RedisLock +{ + + @Autowired + private RedissonClient redissonClient; + + /** + * 获取锁对象,加锁前需要先获取此对象 + * @param lockKey + * @return + */ + public RLock getLock(String lockKey) + { + return redissonClient.getLock(lockKey); + } + + /** + * 尝试加锁(续命锁) + * @param rLock + * @param waitTime 加锁等待时间, 超时会返回false + * @return + * @throws InterruptedException + */ + public boolean tryLock(RLock rLock, long waitTime) throws InterruptedException + { + return rLock.tryLock(waitTime, TimeUnit.SECONDS); + } + + /** + * 尝试加锁(自动释放锁) + * @param rLock + * @param waitTime 加锁等待时间, 超时会返回false + * @param releaseTime 锁释放时间,上锁releaseTime秒后自动释放锁 + * @return + * @throws InterruptedException + */ + public boolean tryAutoReleaseLock(RLock rLock, long waitTime, long releaseTime) throws InterruptedException + { + return rLock.tryLock(waitTime, releaseTime, TimeUnit.SECONDS); + } + + /** + * 释放锁 + */ + public void unlock(RLock rLock) + { + rLock.unlock(); + } + +} diff --git a/ruoyi-common/ruoyi-common-redis/src/main/resources/META-INF/spring.factories b/ruoyi-common/ruoyi-common-redis/src/main/resources/META-INF/spring.factories index 60d1d47b..0d38498e 100644 --- a/ruoyi-common/ruoyi-common-redis/src/main/resources/META-INF/spring.factories +++ b/ruoyi-common/ruoyi-common-redis/src/main/resources/META-INF/spring.factories @@ -1,5 +1,6 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.ruoyi.common.redis.configure.RedisConfig,\ - com.ruoyi.common.redis.service.RedisService + com.ruoyi.common.redis.service.RedisService,\ + com.ruoyi.common.redis.service.RedisLock