https://www.cnblogs.com/jojop/p/14008824.html

什么是Redis分布式锁?what

需要先了解一下什么是分布式锁?
可以把锁简单的分成两种:1、内存锁,2、分布式锁;

内存锁:

即java中的synchronized关键字修饰的方法,多线程直接访问被synchronized修饰的方法时保证只有一个线程可以进入方法区,也可以叫进程锁。在单机多线程的java程序中,我们可以使用堆内存中的变量作为标志,因为多线程是共享堆内存的,堆内存中的变量对于各个线程都是可见的。

分布式锁:

在分布式环境下,即多台计算机,每个计算机上会启动jvm执行程序的运行环境下,如果不同计算机上的线程想访问临界区域时,该怎么办呢?
前面普通锁的使用堆内存中的变量的方式肯定不适用了。因为在多机环境下,某台计算机上的堆内存中的变量对于其他计算机上的线程肯定是不可见的。那么,根据锁的本质和原理,我们就要找到另外的对于多机上的线程都可见的标志,以它来作为锁,就可以了。这样的锁,就是分布式锁。
当然,这里只是解释了什么是分布式锁,至于分布式锁该如何实现,其实有多重方式,关键在于要保证锁对多机上的程序是可见的即可。一些常用的实现方式是,使用redis;

怎么实现分布锁?how

Redis分布锁代码实现
提取公共方法定义一个锁接口Lock:

  1. public interface Lock{
  2. /**
  3. * 尝试加锁
  4. * key 锁对象
  5. * timeout 锁超时时间
  6. */
  7. boolean tryLock(String key,long timeout,TimeUnit unit);
  8. /**
  9. * 解锁操作
  10. */
  11. void releaseLock(String key);
  12. }

具体实现分布锁,实现Lock接口 RedisLock:

  1. public class RedisLock implements Lock{
  2. }

为什么使用Redis分布式锁?why