使用org.redisson.api制作分布式锁

发布时间:2026/5/21 18:48:56

使用org.redisson.api制作分布式锁 redis可以使用分布式锁的场景redisson封装了该部分内容下面看看怎么使用import lombok.extern.slf4j.Slf4j; 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; Component Slf4j public class RedisUtils { private static RedissonClient REDISSON_CLIENT; public RedisUtils(Autowired RedissonClient redissonClient) { REDISSON_CLIENT redissonClient; } /** * 尝试获取锁 * * param key 锁key * param waitTime 最多等待时间0表示不等待只尝试加锁一次 * param leaseTime 上锁后自动释放锁时间-1表示不自动释放锁 * return 获取锁成功返回true 失败返回false */ public static boolean tryLock(String key, long waitTime, long leaseTime) { RLock lock REDISSON_CLIENT.getLock(key); try { return lock.tryLock(waitTime, leaseTime, TimeUnit.SECONDS); } catch (InterruptedException e) { return false; } } public static void unlock(String key) { RLock lock REDISSON_CLIENT.getLock(key); if (lock.isLocked() lock.isHeldByCurrentThread()) { lock.unlock(); } else { log.warn(redis锁已超时释放); } } }import lombok.extern.slf4j.Slf4j; 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; Component Slf4j public class RedisUtils { private static RedissonClient REDISSON_CLIENT; public RedisUtils(Autowired RedissonClient redissonClient) { REDISSON_CLIENT redissonClient; } /** * 尝试获取锁 * * param key 锁key * param waitTime 最多等待时间0表示不等待只尝试加锁一次 * param leaseTime 上锁后自动释放锁时间-1表示不自动释放锁 * return 获取锁成功返回true 失败返回false */ public static boolean tryLock(String key, long waitTime, long leaseTime) { RLock lock REDISSON_CLIENT.getLock(key); try { return lock.tryLock(waitTime, leaseTime, TimeUnit.SECONDS); } catch (InterruptedException e) { return false; } } public static void unlock(String key) { RLock lock REDISSON_CLIENT.getLock(key); if (lock.isLocked() lock.isHeldByCurrentThread()) { lock.unlock(); } else { log.warn(redis锁已超时释放); } } }

相关新闻