什么时候需要用到分布式锁?
需要对一个共享变量进行多线程访问时,为了保证在高并发的情况下,一个方法或者变量在同一时间内只能被一个线程执行。若是单机部署,我们可以用并发控制来保证。若是多机部署,多线程分布在不同的机器上,简单的并发控制已经不能满足要求,这时就需要用到分布式锁。
分布式锁的目的:
系统部署在多个服务器上时,当有多个客户端同时对某个变量进行操作,要保证变量更新的有序性和操作唯一性。
即:不能多个客户端同时对变量进行操作。
分布式锁的三种实现方式
1. 基于数据库实现分布式锁;MySQL…
在数据库中创建一个表,表中包含方法名等字段,在方法名字段上创建一个唯一索引,要想执行某个方法时,需要使用这个方法名向表中插入数据,成功插入则获取锁,执行完再删除对应 的行数据释放锁。
步骤:
① 创建一个表 method_lock(id, method_name, desc, ip, update_time)
② 多个进程同时执行某个方法,那么需要同时在method_lock中插入数据,因为method_lock 的 method_name做了唯一性约束,所以最终只能有一个进程能执行此方法。
③ 成功插入则获取锁,执行完成后删除对应的行数据释放锁。
基于数据库实现分布式锁的缺点:
① 因为这是基于数据库实现的,数据库的可用性和性能将直接影响分布式锁的可用性及性能,所以,数据库需要双机部署、数