分布式锁的实现方式有多种,例如: Mysql, Redis, Zookeeper,或者自研分布式锁比如谷歌的Chubby, 今天介绍如果用Redis实现分布式锁,笔者认为在java开发中,使用Reids 加锁方式比较方便容易上手,
前置条件: 安装Redis, 使用redisson 包或者maven依赖
封装一个 redissonUtil 主要方法有两个,一个是加锁的一个是解锁的
方法1: public boolean trylock(String lockName, long waitTime) { try { String key = RedisConstant.REDIS_LOCK_PRE + lockName; RLock lock = this.redissonClient.getLock(key); return lock.tryLock(waitTime, TimeUnit.MILLISECONDS); } catch (Exception var6) { log.error(StrUtil.format("tryLock fail!lockName={}", new Object[]{lockName}), var6); return false; } }
方法2:
public void unlock(String lockName) { String key = RedisConstant.REDIS_LOCK_PRE + lockName; RLock lock = this.redissonClient.getLock(key); if (lock != null && lock.isHeldByCurrentThread()) { lock.unlock(); } }
新建一个SpringBoot Web项目,新建一个 Controller
以上的例子可以放到service层,这里为了演示方便。