【技术实现步骤摘要】
一种基于Redis的分布式锁的实现方法,存储设备及服务器
[0001]本专利技术涉及计算机领域,具体涉及一种基于Redis的分布式锁的实现方法,存储设备及服务器。
技术介绍
[0002]当前企业级系统设计越来越复杂,涉及到的服务器越来越多,也就必然涉及到越来越多的子系统之间需要操作(添加、编辑、删除)一些共同的关键数据。而在系统高并发下,当多个需求方需要操作同一个数据时,如果对这些关键数据不作锁定处理,极易造成数据不一致,进而破坏整个系统的稳定性和安全性。为了保障前述操作中数据安全性和一致性,也就催生了锁这一工具,用来在操作数据前,首先锁定数据做排他性操作。当前软件系统中锁主要实现方式有:通过内存方式实现锁、通过关系型数据库方式实现锁和通过中间件方式实现锁。基于内存方式实现锁是指:需要锁定关键数据时,直接在内存中开辟一个锁,其它请求方在操作数据前,均需要检查此锁是否存在,如果存在则排队等待锁释放。基于关系型数据库方式实现锁是指:使用分布式系统连接的关系型数据库行锁实现分布式锁,具体为在关系型数据库中定义分布式锁表,插入相应锁 ...
【技术保护点】
【技术特征摘要】
1.一种基于Redis的分布式锁的实现方法,其特征在于,包括以下步骤:S1将锁名编码做为查询条件,向Redis服务器发出查询请求,检查锁是否存在,如果存在则转步骤S2进入锁心跳检查流程,如果不存在,则转步骤S3准备向Reids数据库中写入锁信息;S2定时检查锁是否任然存在,当检测到锁不存在时,转步骤S1,再次尝试锁定目标,当检测到锁存在时并且超过最长等待时间,则向调用方反馈锁定失败;S3尝试将锁相关信息写入Redis数据库。2.如权利要求1所述的一种基于Redis的分布式锁的实现方法,其特征在于,所述锁名编码采用锁名称和自动失效时间构造;所述锁相关信息包含锁名、锁唯一签名和锁自动失效时间。3.如权利要求1所述的一种基于Redis的分布式锁的实现方法,其特征在于,所述每个锁都有自己的唯一签名;若同时生成了相同名称的两个锁对象当调用方主动释放锁时,则系统通过锁自己的唯一签名,自动识别正确的锁,而忽略错误的锁;所述唯一签名生成规则包括,机房标识+机器标识+13位时间搓+4位递增序列,共23位字符串编码;所述机房标识:通过2位字符串,支持99个不同的机房,位数不足的用0占位;所述机器标识:使用4位字符串,同一个机房支持9999台服务器,位数不足的用0占位;所述时间搓:采用编码生成器使用当前时间搓减启动时间搓的差值,最后格式化为13位,位数不足的用0占位;所述递增序列:采用毫秒内计数,同一机器、同一毫秒内支持9999个计数号,位数不足的用0占位。4.如权利要求1所述的一种基于Redis的分布式锁的实现方法,其特征在于,还包括步骤,系统在锁自动失效时间到期后自动释放锁。5.如权利要求1所述的一种基于Redis的分布式锁的实现方法,其特征在于,还包括步骤,自动通过预定义的LUA函数,检查锁名和锁唯一签名是否一致,一致则释放当前锁,否则返回错误信息;预定义Redis的LUA函数,用于在一次请求中完成验证锁、删除锁的流程;所述预定义的Redis的LUA函数执行以下逻辑,首先检查锁名是否存在,然后比较锁对象保存的唯一识别码和Redis数据库中保存的唯一识别码是否一致。6.一种存储设备,其特征在于,其中存储有多条指令,所述指令适于由处理器加载并执行:S1将锁名编码做为查询条件,向Redis服务器发出查询请求,检查锁是否存在,如果存在则转步骤S2进入锁心跳检查流程,如果不存在,则转步骤S3准备向Reids数据库中写入锁信息;S2定时检查锁是否任然存在,当检测到锁不存在时,转步骤S1,再次尝试锁定目标,当检测到锁存在时并且超过最长等待时间,则向调用方反馈锁定失败;
S3尝试将锁相关信息写入Redis数据库。7.如权利要求6所述的一种存储设备,其特征在于,所述锁名编码采用锁名称和自动失效时间构造;所述锁相关信息包含锁名、锁唯一签名和锁自动失效时间;所述每个锁都有自己的唯一签名;若同时生成了相同名称的两个锁对象当调用方主动释放锁时,...
【专利技术属性】
技术研发人员:张军,魏粤,付小东,
申请(专利权)人:重庆盈熙横纵信息技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。