分布式锁实现原理

1. 分布式锁

假设3个线程访问一个文件资源,对这个文件更新或读取操作,可以通过synchronized或lock进行线程同步,解决多线程情况下并发问题。

但是在分布式架构,都会是多模块独立部署不同机器,多进程情况下,怎么弄?
比如3个系统,订单,发货,结算都要去操作同一个文件

分布式锁
1.通过数据库的方式解决

create table lock(
id
methodname 唯一约束

插入一条lock记录或得锁,删除这条lock这条记录,释放锁
1.1 弊端,删除失败,其他的进程都获取不到这个锁了
1.2 不是可重入锁,需要改造

2. 通过zookeeper

2.1 以树形结构存储数据
locks下面插入节点,零时有序节点
2.2 优势
有一个watch会监控节点,一个节点失效,会被删除,会启用用下一个节点

3. 基于redis

3.1 命令setnx,只会在key不存在的情况下为可以设置值,并且返回0或1,存在返回1,谁先设置这个值,谁先获取这个锁

posted @ 2018-07-08 16:37  james.yj  阅读(185)  评论(0编辑  收藏  举报