【技术实现步骤摘要】
分布式锁实现方法、装置和电子设备
本申请涉及分布式
,具体而言,涉及一种分布式锁实现方法、装置和电子设备。
技术介绍
随着业务的不断发展,在传统单机业务系统中,可以通过不断增加线程的方式,来提升服务的吞吐量,同时单机环境中可以实现各种方式的锁机制来保证线程安全。但是单机系统存在天然的缺陷,单机的能力不可能无限提升,同时单机无法保证服务的高可用。因此,分布式系统的出现,使得单机业务的缺陷得以弥补,但是也带来了新的问题,其中一个最大问题就是分布式环境的线程安全问题,于是引入了分布式锁来解决分布式环境下的线程安全问题。但是目前基于zookeepeer或redis实现的分布式锁中,一般需要利用中间件来实现,在各种应用场景下,应用终端在确定是否具有分布式锁时,均需与zookeepeer或redis进行一次网络数据交互才可实现。这样的方式不仅占用大量的网络资源且对双方性能造成影响。
技术实现思路
本申请的目的包括,例如,提供了一种分布式锁实现方法、装置和电子设备,其能够减少网络交互、提升系统性能。本申请的实施例
【技术保护点】
1.一种分布式锁实现方法,其特征在于,应用于包含多个应用终端的分布式系统中的任一应用终端,各所述应用终端与缓存服务器通信连接,各所述应用终端创建有多个线程,所述方法包括:/n针对任一所述应用终端,向所述缓存服务器发送锁释放请求时,监测当前所述分布式系统中是否存在其他应用终端向所述缓存服务器发送过加锁请求;/n若存在,则将自身对应的全局锁以及自身包含的各线程对应的内部锁进行释放,并将所述全局锁设置为未加锁状态,删除自身在进行加锁时所创建的加锁节点;/n若不存在,则保留自身对应的全局锁并将自身包含的各线程对应的内部锁进行释放。/n
【技术特征摘要】
1.一种分布式锁实现方法,其特征在于,应用于包含多个应用终端的分布式系统中的任一应用终端,各所述应用终端与缓存服务器通信连接,各所述应用终端创建有多个线程,所述方法包括:
针对任一所述应用终端,向所述缓存服务器发送锁释放请求时,监测当前所述分布式系统中是否存在其他应用终端向所述缓存服务器发送过加锁请求;
若存在,则将自身对应的全局锁以及自身包含的各线程对应的内部锁进行释放,并将所述全局锁设置为未加锁状态,删除自身在进行加锁时所创建的加锁节点;
若不存在,则保留自身对应的全局锁并将自身包含的各线程对应的内部锁进行释放。
2.根据权利要求1所述的分布式锁实现方法,其特征在于,所述方法还包括预先获得全局锁和内部锁的步骤,该步骤包括:
针对任一所述应用终端,监测当前是否具有创建加锁节点的权限,若具有,则按预设顺序编号方式创建对应的加锁节点;
获取所述缓存服务器的节点列表中已存在的加锁节点;
根据当前创建的加锁节点对应的锁类型以及所述节点列表中已存在的加锁节点的锁类型,判断是否加锁成功;
若确定加锁成功,则获得对应的全局锁,并基于获得的全局锁为包含的各线程设置对应的内部锁。
3.根据权利要求2所述的分布式锁实现方法,其特征在于,当前创建的加锁节点和所述节点列表中已存在的加锁节点的锁类型均为读锁;
所述根据当前创建的加锁节点对应的锁类型以及所述节点列表中已存在的加锁节点的锁类型,判断是否加锁成功的步骤,包括:
检测当前创建的加锁节点的编号是否为最小,若为最小则判定加锁成功;
若不为最小,则查看所述节点列表中已存在的加锁节点中编号比当前创建的加锁节点的编号更小的加锁节点的锁类型是否为读锁,若为读锁,则判定加锁成功,否则判定加锁不成功。
4.根据权利要求2所述的分布式锁实现方法,其特征在于,当前创建的加锁节点和所述节点列表中已存在的加锁节点对应的锁类型均为写锁,或者包含读锁和写锁;
所述根据当前创建的加锁节点对应的锁类型以及所述节点列表中已存在的加锁节点的锁类型,判断是否加锁成功的步骤,还包括:
检测当前创建的加锁节点的编号是否为最小,若为最小则判定加锁成功,否则,判定加锁不成功。
5.根据权利要求2所述的分布式锁实现方法,其特征在于,所述监测当前是否具有创建加锁节点的权限的步骤,包括:
监测所述缓存服务器中的用于管理节点列表的持久性节点的访问路径是否存在,若不存在,则判...
【专利技术属性】
技术研发人员:陈佛林,高斌,
申请(专利权)人:成都新希望金融信息有限公司,
类型:发明
国别省市:四川;51
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。