面试宝典-高级开发-分布式锁
分布式锁有三种实现方式:
第一种:用数据库实现分布式锁。
第二种:用redis集群 (lock)
try{
//设置锁
boolean lock = redisTemplate.opsForValue().setIfAbsent(lockKey, LOCK);
if (lock) {
//成功设置过期时间
redisTemplate.expire(lockKey,1, TimeUnit.MINUTES);
return res;
}else {
//锁失败
}
}finally{
redisTemplate.delete(lockKey);
}
优点:1.用set和del的效率比较快 2.redis可以用集群(铁三角模式)相对比较稳定
缺点: 1.用起来相对复杂,要考虑超时,误删的情况。2.没有等待锁的队列
第三种:用zookeeper实现分布式锁
优点:1.有封装好的方法,容易实现 2.有等待锁的队列
缺点: 1.在一定情况下(网络,超时)的情况下会出现并发问题 2.添加和删除节点效率降低