1.为什么需要分布式锁?
public synchronized void test() {
System.out.println("获取到锁");
}
public void test2() {
synchronized (Test.class) {
System.out.println("获取到锁");
}
}
假设我们把上述代码部署到多台服务器上,这个互斥锁还能生效吗?答案是否定的,这时分布式锁应运而生。
2.Redis分布式锁?
接下来我给大家讲解完整的演变过程,让大家更深刻的理解分布式锁。
Redis setnx
线程1申请加锁,这时没有人持有锁,加锁成功:
127.0.0.1:6379> setnx lock 1
(integer) 1
线程2申请加锁,此时发现有人持有锁未释放,加锁失败:
127.0.0.1:6379> setnx lock 1
(integer) 0
线程1执行完成业务逻辑后,执行DEL命令释放锁:
127.0.0.1:6379> del lock
(integer) 1
存在问题:
①假设线程1执行到一半,系统挂了,这时锁还没释放,就会造成死锁。
②如果Re