[发明专利]一种分布式锁在审
申请号: | 202110642984.3 | 申请日: | 2021-06-09 |
公开(公告)号: | CN113312185A | 公开(公告)日: | 2021-08-27 |
发明(设计)人: | 宋喆;张建伟;江燕 | 申请(专利权)人: | 浪潮云信息技术股份公司 |
主分类号: | G06F9/52 | 分类号: | G06F9/52 |
代理公司: | 济南信达专利事务所有限公司 37100 | 代理人: | 姜鹏 |
地址: | 250100 山东省济南市高*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 分布式 | ||
本发明涉及计算机技术领域,具体提供了一种分布式锁,基于Redis的自身特性以及命令,设置key值及过期时间,利用分布式锁加锁、释放锁和释放锁前置检查过程,用于保证进程访问共享资源的完整性和一致性。与现有技术相比,本发明避免了同时访问时对资源进行争夺导致系统错误,提高了程序稳定性,具有良好的推广价值。
技术领域
本发明涉及计算机技术领域,具体提供一种分布式锁。
背景技术
在单机时代,尽管不需要分布式锁,但仍然面临的类似问题,多个线程对临界资源访问的时候,面临着如何保证资源一致性和完整性的问题,我们可以通过线程间加速的方式,如ava中synchronize/Lock等。随着互联网技术的不断发展,分布式系统成为常见的场景,共享资源存在于不同节点中,简单的线程间加锁的方式就难以满足应用的需要。
发明内容
本发明是针对上述现有技术的不足,提供一种实用性强的分布式锁。
本发明解决其技术问题所采用的技术方案是:
一种分布式锁,基于Redis的自身特性以及命令,设置key值及过期时间,利用分布式锁加锁、释放锁和释放锁前置检查过程,用于保证进程访问共享资源的完整性和一致性。
进一步的,在分布式锁加锁中,Redis的setnx命令适合作为排他性的锁实现,该命令只有在相应key值不存在的情况下才会通过该命令设置value成功,否则返回失败结果。
进一步的,当一个进程需要独占某个共享资源时,需要通过setnx命令设置value,当其余进程再执行该命令时,则设置value失败即为获得锁失败。
进一步的,所述加锁的流程为:
加锁时通过命令设置key值及过期时间,若命令执行成功,则说明获得锁成功,若命令执行失败,则获取已存在锁的过期时间与当前系统时间进行比较,若过期时间小于当前系统时间,说明锁已过期,则可以由该进程重新获得,使用getset命令设置新的过期时间;若过期时间大于当前系统时间,说明锁未过期,则无法获得。
进一步的,在释放锁中,当一个进程完成对某个共享资源的独占使用后,可以执行delete命令删除此前获得锁过程中所设置的键值对;此后其余进程需要对该共享资源的进行独占访问时,即可通过setnx命令获得锁。
进一步的,所述释放锁的流程为:
释放锁时首先验证已存在锁的特征值,判断是否为当前进程所设置,若验证失败,则不可进行释放锁操作;若验证成功,则获取该锁的过期时间,与当前系统时间进行比较,若过期时间小于当前系统时间,说明锁已过期,无需进行操作,若过期时间大于当前系统时间,则执行delete命令,进行释放锁操作。
进一步的,释放锁前置检查,当一个进程还没有结束对共享资源的独占访问,锁会当达到超时时间而释放掉,当另外进程获得锁后,则当一个进程结束对资源的访问后,则会错误执行释放锁操作。
进一步的,当进程进行释放锁操作时,通过get命令获得value,验证此value是否为该进程设置的identifier,若验证通过,则可进行delete操作。
本发明的一种分布式锁和现有技术相比,具有以下突出的有益效果:
本发明实现的分布式锁,具有互斥性、无死锁、容错性的特点。在分布式系统环境下,保证了多个客户端对共享资源进行独享访问时完整性和一致性,避免了同时访问时对资源进行争夺导致系统错误,提高了程序稳定性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浪潮云信息技术股份公司,未经浪潮云信息技术股份公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110642984.3/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种气体绝缘变压器
- 下一篇:一种磁性椭偏测量装置