安全公司报告
(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

.PDF文档 专利 一种基于池化技术改善分布式锁性能的方法及存储介质

文档预览
中文文档 11 页 50 下载 1000 浏览 0 评论 309 收藏 3.0分
温馨提示:本文档共11页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
专利 一种基于池化技术改善分布式锁性能的方法及存储介质 第 1 页 专利 一种基于池化技术改善分布式锁性能的方法及存储介质 第 2 页 专利 一种基于池化技术改善分布式锁性能的方法及存储介质 第 3 页
下载文档到电脑,方便使用
本文档由 人生无常 于 2024-03-18 16:32:31上传分享
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。