使用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锁已超时释放); } } }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2425860.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!