(19)国家知识产权局
(12)发明 专利申请
(10)申请公布号
(43)申请公布日
(21)申请 号 202211187874.3
(22)申请日 2022.09.26
(71)申请人 武汉众邦银行股份有限公司
地址 432200 湖北省武汉市黄陂区盘龙城
经济开发区汉口北大道88号汉口北国
际商品交易中心D2区1-2层、 2 2-23层
(72)发明人 谢伟 朱俊 彭磊
(74)专利代理 机构 成都正煜知识产权代理事务
所(普通合伙) 51312
专利代理师 李龙
(51)Int.Cl.
G06F 9/52(2006.01)
G06F 9/54(2006.01)
G06F 9/445(2018.01)
(54)发明名称
一种基于池化技术改善分布式锁性能的方
法及存储介质
(57)摘要
本发明涉及信息技术领域, 提供了一种基于
池化技术改善分布式锁性能的方法及存储介质。
目的在于解决订单场景中的交易排它性并且对
稀缺资源使用不善导致频繁连接失败的问题。 主
要方案包括构建RedisLock服务组件, 对
RedisLock服务组件类进行功能逻辑封装, 引入
池化管理方法改进逻辑封装后的RedisLock服务
组件, 使用工厂组件来管理Jedi s对象; 将构建的
连接池对象交给Sp ring来初始化管理; 进行服务
正确性质量测试, 进行分布式锁工具服务单元验
证; 在日常应用需要加分布式锁的交易中, 注入
RedisLock服务组件进行分布式锁的使用, 调用
“加锁/阻塞锁 ”,“解锁”完成整个交易过程。
权利要求书3页 说明书6页 附图1页
CN 115454662 A
2022.12.09
CN 115454662 A
1.一种基于池化 技术改善分布式锁性能的方法, 其特 征在于, 包括以下步骤:
步骤1、 首先通过java程序对内存数据库Redis命令和lua脚本相 结合的手段形成分布
式锁服务提供者“RedisLock服务组件”。
步骤2、 针对步骤1构建的RedisLock服务组件类进行功能逻辑封装, 使RedisLock服务
组件独立提供加锁、 阻塞锁、 解锁、 构建锁脚本、 锁资源连接创建的基础服务, 得到逻辑封装
后的RedisL ock服务组件。
步骤3、 引入池化管理方法改进逻辑封装后的RedisLock服务组件, 使用工厂组件
JedisConnectionFactory来管理Jedis对象, JedisConnectionFactory利用设计模式让连
接工厂根据不同的方案来创建相应的连接, 创建连接过程与配置连接信息完全解耦, 实现
以后拓展Je dis对象更多的配置信 息, 组件Je disConnectionFactory按Re dis单机/集群不
同模式来建立对象资源池, 并配置参数, 初始化一组连接, 供需要Redis连接的线程取用, 对
连接数进行限制完成连接池 对象构建;
步骤4、 结合Spring框架做整合集成, 将步骤3构建的连接池对象交给Spring来初始化
管理;
步骤5、 编写RedisLock服务组件案例, 进行服务正确性质量测试, 进行分布式锁工具服
务单元验证;
步骤6、 通过步骤5测试RedisLock服务组件功能正确性后, 在日常应用需要加分布式锁
的交易中, 注入RedisLock服务组件进行分布式锁的使用, 调用 “加锁/阻塞锁 ”,“解锁”完成
整个交易过程。
2.根据权利要求1所述的一种基于池化技术改善分布式锁性 能的方法, 其特征在于, 步
骤1具体包括以下步骤:
步骤1.1、 创建java程序单元命名为RedisLock服务组件类, 定义RedisLock的构造函数
对象, 引入redis操作对象的客户端Jedis工具, 用于后续操作redis命令;
步骤1.2、 定义lua脚 本读取工具luaScriptUtil, luaScriptUti以字节流的形 式把服务
器下lua脚本文件, 读取到程序中, 提供给RedisLock服务组件使用, 至此完成RedisLock服
务组件类准备工作。
3.根据权利要求2所述的一种基于池化技术改善分布式锁性 能的方法, 其特征在于, 步
骤2具体包括以下步骤:
步骤2.1、 创建非阻塞锁、 阻塞锁, 使用步骤1.1中加入的Jedis工具通过API命令操作
Redis形成锁;
非阻塞锁实现方式: 如果没有拿到锁, 立刻返回失败, 线程 不阻塞;
阻塞锁实现方式: 一直循环获取锁, 如果获取不到, 线程休眠几秒, 到获取到锁为止, 线
程阻塞;
步骤2.2、 创建解锁服务单元, jedis工具通过del命令操作Redis解锁; 在解锁时先需要
判断锁是否是自己的, 使用lua脚本来判断value 是否相等, 相等时执 行del命令, 释放锁;
步骤2.3、 创建连接服务单元, 使用步骤1.1中引入的Jedis工具作为连接Redis的桥梁,
需操作Redis时, 直接获取Jedis对象即可。
4.根据权利要求2所述的一种基于池化技术改善分布式锁性 能的方法, 其特征在于, 步
骤3具体包括以下步骤:权 利 要 求 书 1/3 页
2
CN 115454662 A
2步骤3 .1、 使用工厂组件JedisConnectionFactory来管理Jedis对象。
JedisConnectionFactory利用设计模式让连接工厂根据不同的方案来创建相应的连接, 创
建连接过程与配置连接信息 完全解耦, 实现以后拓展Jedis对象更多的配置信息;
步骤3.2、 工厂组件JedisConnectionFactory按Redis单机/集群不同模式来建立对 象
资源池, 并配置参数, 初始化一组连接, 供需要Redis连接的线程取用, 并对连接数进行限
制, 保证了性能稳定性。
步骤3.3、 基于3.2中工厂组件的配置参数是依赖于配置连接池参数的管理对象
JedisPoolConfig来实现连接池参数化管控, 这里通过参数设置进行池化调优, 来达到高并
发下分布式锁性能, 配置参数包括以下几点:
maxTotal: 资源 池中的最大 连接数;
maxIdle: 资源 池允许的最大空 闲连接数;
minIdle: 资源 池确保的最少空 闲连接数;
blockWhenExhausted: 当资源池用尽后, 调用者是否要等待, 只有当值为true时, 下面
的maxWaitMi llis才会生效;
maxWaitMi llis: 当资源池连接用尽后, 调用者的最大等待时间, 单位 为毫秒;
testOnBorrow: 向资源池借用连接时是否做连接有效性检测(ping)。 检测到的无效连
接将会被移除;
按目前并发场景JedisPo olConfig初始化 参数配置为:
MaxIdle=10 MaxTotal =300;
MaxWaitMillis=10000TestOnBorrow=trueTestOnReturn=true连接池启动时以配
置参数初始化 运行。
5.根据权利要求2所述的一种基于池化技术改善分布式锁性 能的方法, 其特征在于, 步
骤4具体包括以下步骤:
步骤4.1、 基于Spring框架整合, 启动时会加载应用配置XML文件, XML里面会配置步骤
3.2中的配置连接池参数的管理对象JedisPoolConfig, 管理连接池参数配置maxTotal、
maxIdle minIdle, Spring容器启动时将按参数初始化JedisConnectionFactory对象来构
建连接池;
步骤4.2、 XML里面配置步骤3.1中工厂组件JedisConnectionFactory对 象属性主要包
括redis数据库服 务器IP、 端口、 密码信息用于连接池初始化自动创建Redis连接时使用。
6.根据权利要求2所述的一种基于池化技术改善分布式锁性 能的方法, 其特征在于, 步
骤5具体包括以下步骤:
步骤5.1、 编写加锁的测试代码, 通过开发工具运行后, 验证服 务组件加锁的正确性。
步骤5.2、 编写阻塞锁的测试代码, 通过开发工具运行后, 验证服务组件阻塞锁功能的
正确性;
步骤5.3、 在步骤5.1和5.2测试代码的基础 上, 添加解锁的代码, 通过开发工具运行后,
验证服务组件加锁后, 马上解锁的正确性。
步骤5.4、 编写多线程代码, 模拟高并发场景, 调用加锁及解锁服务, 运行后, 验证分布
式锁的可用性及性能。
7.一种存储介质, 其特征在于, 处理器执行存储介质内存储的程序时实现如权利要求权 利 要 求 书 2/3 页
3
CN 115454662 A
3
专利 一种基于池化技术改善分布式锁性能的方法及存储介质
文档预览
中文文档
11 页
50 下载
1000 浏览
0 评论
309 收藏
3.0分
温馨提示:本文档共11页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 人生无常 于 2024-03-18 16:32:31上传分享