什么是分布式锁?
控制分布式架构中多个模块访问的优先级
要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。
线程锁:主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如synchronized是共享对象头,显示锁Lock是共享某个变量(state)。
进程锁:为了控制同一操作系统中多个进程访问某个共享资源,因为进程具有独立性,各个进程无法访问其他进程的资源,因此无法通过synchronized等线程锁实现进程锁。
分布式锁:当多个进程不在同一个系统中,用分布式锁控制多个进程对资源的访问。
分布式锁实现方式
1.基于数据库实现分布式锁
基于数据库表
往数据库中插入数据,插入成功获取访问资源的锁,访问完成,删除数据库中对应的记录,释放访问资源的锁
要实现分布式锁,最简单的方式可能就是直接创建一张锁表,然后通过操作该表中的数据来实现了。
当我们要锁住某个方法或资源时,我们就在该表中增加一条记录,想要释放锁的时候就删除这条记录。
创建这样一张数据库表:
![](https://i-blog.csdnimg.cn/blog_migrate/2a6141fdb6da1085f6425911e996ff39.webp?x-image-process=image/format,png)
image
当我们想要锁住某个方法时,执行以下SQL: