RedisLock lock = new RedisLock(redisTemplate, userid, 50000, 60000);
try {
if(lock.lock()) {
userInfo = userService.doSomething(xxxxx);
}
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
lock.unlock();
}
redisTemplate -- 你的jedis对象
userid -- 锁的名称
50000, 60000 --- 锁的超时时间
分布式锁主要是可以在多个机器之间进行同步,而jdk的Lock都是进程内线程之间同步,同时分布式锁有各种防止超时,过期,大并发量竞争等机制
Lock能够让代码块原子执行,但是比synchronized更加强大,Lock具有嗅探锁定、多路分支通知等功能。
常规的synchronized和jdk的lock都是只在java进程内有效,当涉及分布式环境时其作用域就不满足了。
redis实现的分布式锁原理是setNX时成功或失败会返回1或0,由于这个操作具有原子性,
所以可以保证并发情况下同一时间只有一个线程可以设置成功获取锁。
redisTemplate 是连接对象
userid 是锁的标识
50000, 60000 推测一个是最大等待获取锁时间另一个是获取锁后超时释放锁时间