1.Redis分布式锁
在了解Redis的分布式锁的时候,我们先来看看单机上的锁和分布式锁的联系和区别
我们先来看下单机上的锁。
对于在单机上运行的多线程程序来说,锁本身可以用一个变量表示,比如java的synchronized,你可以用unself方法反射出monitor,就是通过monitor去加锁解锁的
- 变量值为0时,表示没有线程获取锁;
- 变量值为1时,表示已经有线程获取到锁了。
我们通常说的线程调用加锁和释放锁的操作,到底是啥意思呢?我来解释一下。实际上,一个线程调用加锁操作,其实就是检查锁变量值是否为0。如果是0,就把锁的变量值设置为1,表示获取到锁,如果不是0,就返回错误信息,表示加锁失败,已经有别的线程获取到锁了。而一个线程调用释放锁操作,其实就是将锁变量的值置为0,以便其它线程可以来获取锁。
我用一段代码来展示下加锁和释放锁的操作,其中,lock为锁变量。
acquire_lock(){
if lock == 0
lock = 1
return 1
else
return 0
}
release_lock(){
lock = 0
return 1
}
和单机上的锁类似,分布式锁同样可以