1. 什么是分布式锁?
了解多线程的童鞋一定也知道锁的概念的,而多线程是针对单个服务而言的。对于多个服务而言,多线程中的锁显然是没啥意义的。于是,就有了分布式锁,它是针对多个服务之间有序合作的。
2. 为什么要用分布式锁?
因为互联网应用中为了应对高并发采用了负载均衡的策略,多个服务之间要有序合作,就需要引入分布式锁了。
举个栗子,小明在超市买了根雪糕,付账时网络信号不好,也没有提示支付成功或失败。这时候,店家要求再支付一次,于是小明又支付了一次。结果呢,其实第一次支付请求已经发出去了,因为支付了两次,负责处理支付业务的两个服务都收到了该请求,这时候要处理的其实是一个订单而不是两个,对吧?没有分布式锁的存在,这种问题几乎是无解的。
3. 分布式锁有哪些实现方式?
(1)用数据库锁实现:建一张表,里面有一个标志位字段,标识了是否存在锁状态。当某一个服务需要执行某个操作时,就更新该锁字段的状态。
(2)用redis实现:redis本身支持key-value的形式,执行某个操作前更新该锁的value值即可(可以设置超时时间来避免死锁)。
(3)用zookper实现:通过在一个目录下创建临时节点的方式来实现。