[发明专利]构建用于Redis数据库的分布式锁的方法有效

专利信息
申请号: 201910583604.6 申请日: 2019-07-01
公开(公告)号: CN110287206B 公开(公告)日: 2021-04-27
发明(设计)人: 李长彬 申请(专利权)人: 四川新网银行股份有限公司
主分类号: G06F16/23 分类号: G06F16/23
代理公司: 成都智言知识产权代理有限公司 51282 代理人: 濮云杉
地址: 610094 四川省成都市成都*** 国省代码: 四川;51
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 构建 用于 redis 数据库 分布式 方法
【说明书】:

发明涉及构建用于Redis数据库的分布式锁的方法,包括:A.在RabbitMQ中创建死信交换机和直连交换机,以及创建死信队列和分布式锁队列,将死信队列和死信交换机绑定,分布式锁队列分别与死信交换机分别和直连交换机绑定;B.定义基于Redssion的用于获取分布式锁和释放分布式锁的工具类;C.定义死信队列的消费者类;D.调用工具类中的加锁方法,得到加锁是否成功的结果;E.加锁成功,则执行业务代码;加锁失败,退出执行业务代码;F.锁释放。本发明能够满足高并发场景中的性能诉求,并且解决了基于Redis数据库的锁失效时间机制,以及失效时间设置过长或过短导致锁提前释放等问题,实现了实现高可用性。

技术领域

本发明涉及分布式系统中分布式锁的构建方法,具体讲是构建用于Redis数据库的分布式锁的方法。

背景技术

在分布式应用的场景下,有时需要保证一个资源在同一时间内只能被同一个操作方修改,因此就引入了分布式锁的概念和技术。为了实现分布式锁,目前比较常用的几种方式为:

1.基于数据库实现分布式锁:

步骤:

1)在数据库中创建一张锁表,用于记录每个线程对应持有的锁;

2)获取锁的时候,向锁表中增加一条记录;

3)释放锁的时候,删除这条记录;

缺点:

1)性能不能满足高并发场景的诉求;

2)为了提高可用性,解决单点问题,需要两台数据库,并互为主备,运维难度高;

3)为了实现阻塞锁,需要不断尝试直到成功,这种方式验证浪费服务资源;

4)为了实现可重入锁,需要记录机器信息、线程信息,操作繁琐复杂;

5)为了解决死锁,需要记录锁失效时间,做一个定时任务,每隔一定时间把数据库超时的数据清理掉,增量了工作量而且也不能做到即时释放锁资源;

2.基于zookeeper(一种分布式的、开放源码的分布式应用程序协调服务)实现分布式锁:

步骤:

1)在zookeeper对于指定节点的目录下,生成一个唯一的瞬时有序节点;

2)获取锁的时候,只需要判断有序节点中序号最小的一个;

3)释放锁的时候,将这个瞬时节点删除即可;

缺点:

1)性能较低,不能满足高并发场景的诉求;

3.基于Redis(一种开源的数据库)实现分布式锁:

步骤:

1)调用RedissonClient的tryLock方法来实现获取锁;

2)调用RedissonClient的unlock方法实现释放锁;

缺点:

1)基于Redis的失效时间(Time To Live)机制,在服务宕机的情况下,可以自动释放锁。但是失效时间设置多长不好确定,如果设置的时间太短,方法没执行完,锁就自动释放了,那么就会导致并发问题。如果设置的时间太长,其他需要获取锁的线程有可能需要多等一段时间。

发明内容

本发明提供了一种构建用于Redis数据库的分布式锁的方法,以降低死锁风险、解决锁提前释放等问题、提高并发性能、实现高可用性(High Availability)。

本发明构建用于Redis数据库的分布式锁的方法,包括:

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于四川新网银行股份有限公司,未经四川新网银行股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/201910583604.6/2.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top