diff --git a/ff-base/src/main/java/com/ff/base/core/redis/RedisCacheLock.java b/ff-base/src/main/java/com/ff/base/core/redis/RedisCacheLock.java deleted file mode 100644 index aba978b..0000000 --- a/ff-base/src/main/java/com/ff/base/core/redis/RedisCacheLock.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.ff.base.core.redis; - -import org.redisson.api.RLock; -import org.redisson.api.RedissonClient; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.util.concurrent.TimeUnit; - - -/** - * redis锁 - * - * @author shi - * @date 2025/03/18 - */ -@Component -public class RedisCacheLock { - - @Resource - private RedissonClient redissonClient; - - /** - * 获取 Redis 分布式锁 - * - * @param key 锁的唯一标识(Redis 键),用于标识要获取的锁 - * @return 返回一个 `RLock` 对象,表示分布式锁 - * - * `RLock` 是 Redisson 提供的分布式锁对象,可以用于多线程或分布式环境中,确保某一时刻只有一个线程(或服务实例)可以执行某个操作。 - */ - public RLock getLock(String key) { - return redissonClient.getLock(key); - } - - /** - * 尝试加锁(可重入锁) - * - * @param key 锁的唯一标识(Redis 键) - * @param waitTime 等待获取锁的最大时间(单位:秒)。如果在指定的时间内未能获取锁,则返回 `false`。 - * @param leaseTime 锁的有效时间(单位:秒)。获取到锁之后,锁会在 `leaseTime` 时间后自动释放,避免死锁。 - * @return `true` 表示成功获取锁,`false` 表示未能在指定时间内获取到锁 - * - * 该方法是可重入锁,意味着同一个线程可以多次加锁而不会发生死锁。`tryLock` 方法不会阻塞,能够防止线程长时间等待。 - * 如果锁已经被其他线程获取,当前线程将会等待 `waitTime` 期间,如果在此时间内无法获取锁,方法将返回 `false`。 - */ - public boolean tryLock(String key, long waitTime, long leaseTime) { - RLock lock = redissonClient.getLock(key); - try { - return lock.tryLock(waitTime, leaseTime, TimeUnit.SECONDS); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); // 恢复线程中断状态 - return false; - } - } - - /** - * 释放锁 - * - * @param key 锁的唯一标识(Redis 键) - * - * 该方法用于释放已经获取的分布式锁。如果当前线程持有锁(即 `RLock` 对象的 `isHeldByCurrentThread()` 方法返回 `true`), - * 则会释放锁。如果不是当前线程持有锁,则该方法不做任何操作,避免抛出异常。 - */ - public void unlock(String key) { - RLock lock = redissonClient.getLock(key); - if (lock.isHeldByCurrentThread()) { - lock.unlock(); // 释放锁 - } - } - -}