一种基于Redis和HBase的分锁方法技术

技术编号:14010792 阅读:92 留言:0更新日期:2016-11-17 11:40
本发明专利技术涉及一种基于Redis和HBase的分锁方法,该方法利用Redis实现分布式锁并利用HBase保存数据,包括下列步骤:根据用户ID得到分锁ID;根据得到的分锁ID对Redis中的Key进行加锁;读取HBase中与所述分锁ID对应的数据;根据读取的数据进行业务逻辑判断,并根据判断结果更新HBase中分锁ID对应的数据;对加锁的Key进行解锁。与现有技术相比,本发明专利技术具有支持数据规模大,并发性高,可靠性高,性能高,面向范围广的特点。

【技术实现步骤摘要】

本专利技术设计一种分锁秒杀方法,尤其是一种基于Redis和HBase的分锁方法
技术介绍
在当今的市场营销活动中,秒杀活动天天出现,比如总量100张的优惠电影票,每人限秒1张。当前主流的秒杀方案是把数据存储在数据库中,调用数据库存储过程完成计算。当前方案存在以下几个基本问题:1)效率比较低,完全依赖于数据库的执行效率。2)无法水平扩展,为提高数据库效率,只能采取垂直提高数据库性能。3)无法完成复杂的逻辑计算,使用存储过程做逻辑计算,数据参数要么来自数据库中的表数据,要么来自调用参数,如果数据来自数据库表那么数据量是有限制的,如果数据来自参数,对输入参数的数量和长度都有限制。
技术实现思路
本专利技术的目的是针对上述问题提供一种支持数据规模大,并发性高,可靠性高,性能高,面向范围广的基于Redis和HBase的分锁方法。本专利技术的目的可以通过以下技术方案来实现:一种基于Redis和HBase的分锁方法,该方法利用Redis实现分布式锁并利用HBase保存数据,进而实现秒杀,该方法包括下列步骤:1)根据用户ID得到分锁ID;2)根据步骤1)中得到的分锁ID对Redis中的Key进行加锁;3)读取HBase中与所述分锁ID对应的数据;4)根据步骤3)读取的数据进行业务逻辑判断,并根据判断结果更新HBase中分锁ID对应的数据;5)对步骤2)中加锁的Key进行解锁。所述步骤1)具体为:IDnumber=IDhash%lockamount其中,IDnumber为分锁ID,IDhash为用户ID的hash值,lockamount为锁的数量,%为取余运算符。所述步骤2)具体为:21)在N个Redis中调用SETNX命令设置Key值;22)判断Redis中调用SETNX命令设置Key Value值的返回值是否为1,若是说明Key值设置成功,若否说明Key值设置失败;23)判断是否有大于N/2个Redis的Key值设置成功,若是则加锁成功,进入步骤3),若否则加锁失败,返回步骤1)。所述HBase中分锁ID对应的数据包括分锁值、用户限量值、用户注册信息以及用户历史交易信息。所述分锁值和用户限量值的初始值均为0。所述业务逻辑判断包括分锁值限额判断、用户限量值限额判断以及支付交易状态判断。所述步骤4)具体为:41)判断用户限量值是否为0,若是则进入步骤42),若否则进入步骤5);42)判断分锁值是否小于分锁限额,若是则进入步骤43),若否则进入步骤5);43)判断支付交易状态是否为成功,若是则进入步骤44),若否则返回步骤41);44)分别对用户限量值和分锁值加1,进入步骤5)。所述分锁限额的计算方法为: L i m i t = t o t a l l o c k a m o u n t ]]>其中,Limit为分锁限额,total为秒杀总量,lockamount为锁的数量。所述解锁具体为:调用Redis的DEL命令删除分锁ID。与现有技术相比,本专利技术具有以下有益效果:(1)使用HBase数据,支持海量数据和极高的并发性,这点是传统数据方案不能比的。(2)使用Redis实现分布式锁,有很高的可靠性,基于Redis的高性能,分布式锁也有极高的性能。(3)分锁机制,应用可以设置任意数量的分锁,性能可以成倍提升。(4)业务数据不局限于HBase,业务逻辑可以任意复杂,面向范围广。(5)进行加锁操作时,只有当大于半数的Redis中的Key设置成功时才视为加锁成功,提高了加锁的准确性。(6)进行加锁操作时,可以容忍部分Redis实例发生故障,容错性能高。附图说明图1为本专利技术的方法流程图;图2为本专利技术的分锁方式图。具体实施方式下面结合附图和具体实施例对本专利技术进行详细说明。本实施例以本专利技术技术方案为前提进行实施,给出了详细的实施方式和具体的操作过程,但本专利技术的保护范围不限于下述的实施例。如图1所示,本实施例提供的基于Redis和HBase的分锁方法具体步骤如下:1)根据用户ID得到分锁ID,具体为:IDnumber=IDhash%lockamount其中,IDnumber为分锁ID,IDhash为用户ID的hash值,lockamount为锁的数量,%为取余运算符;2)根据步骤1)中得到的分锁ID对Redis中的Key进行加锁,具体为:21)在N个Redis中调用SETNX命令设置Key值;22)判断Redis中调用SETNX命令设置Key Value值的返回值是否为1,若是说明Key值设置成功,若否说明Key值设置失败;23)判断是否有大于N/2个Redis的Key值设置成功,若是则加锁成功,进入步骤3),若否则加锁失败,返回步骤1);3)读取HBase中分锁ID对应的数据吗,该数据包括分锁值、用户限量值、用户注册信息以及用户历史交易信息;4)根据步骤3)读取的数据进行业务逻辑判断(包括分锁值限额判断、用户限量值限额判断以及支付交易状态判断),并根据判断结果更新HBase中分锁ID对应的数据,具体为:41)判断用户限量值是否为0,若是则进入步骤42),若否则进入步骤5);42)判断分锁值是否小于分锁限额,若是则进入步骤43),若否则进入步骤5);43)判断支付交易状态是否为成功,若是则进入步骤44),若否则返回步骤41);44)分别对用户限量值和分锁值加1,进入步骤5)。所述分锁限额的计算方法为: L i m i t = t o t a l l o c k a m o u n t ]]>其中,Limit为分锁限额,total为秒杀总量,lockamount为锁的数量;5)对步骤2)中加锁的Key调用Redis的DEL命令删除分锁ID来进行解锁,完成秒杀。如图2所示,以“总量100张优惠电影票,每人限量1张(拆分5把锁),3个Redis实例”的场景举例,其中涉及到的一些操作名称具体为:分锁:把100张电影票拆分5把锁。分锁值:每个锁对应100/5=20张电影票。在HBase中保存为5个值,初始值都为0。分锁ID:Redis中预计保存5把锁,分别为Lock-1至Lock-5。分布式锁算法:在多个服务器上单独装多Redis实例,调用Redis的SETNX命令时,只有大于半数的Redis调用成功才能算加锁成功。如有5个Redis实例只需要3个调用成功则可以算成功,也就是可以忍受一个2个Redis实例故障。针对该场景应用上述步骤进行秒杀的具体步骤为:步骤1:利用分锁算法获取分锁ID:根据用户ID的hash值取模:用户ID 本文档来自技高网...
一种基于Redis和HBase的分锁方法

【技术保护点】
一种基于Redis和HBase的分锁方法,其特征在于,该方法利用Redis实现分布式锁并利用HBase保存数据,进而实现秒杀,该方法包括下列步骤:1)根据用户ID得到分锁ID;2)根据步骤1)中得到的分锁ID对Redis中的Key进行加锁;3)读取HBase中与所述分锁ID对应的数据;4)根据步骤3)读取的数据进行业务逻辑判断,并根据判断结果更新HBase中分锁ID对应的数据;5)对步骤2)中加锁的Key进行解锁。

【技术特征摘要】
1.一种基于Redis和HBase的分锁方法,其特征在于,该方法利用Redis实现分布式锁并利用HBase保存数据,进而实现秒杀,该方法包括下列步骤:1)根据用户ID得到分锁ID;2)根据步骤1)中得到的分锁ID对Redis中的Key进行加锁;3)读取HBase中与所述分锁ID对应的数据;4)根据步骤3)读取的数据进行业务逻辑判断,并根据判断结果更新HBase中分锁ID对应的数据;5)对步骤2)中加锁的Key进行解锁。2.根据权利要求1所述的基于Redis和HBase的分锁方法,其特征在于,所述步骤1)具体为:IDnumber=IDhash%lockamount其中,IDnumber为分锁ID,IDhash为用户ID的hash值,lockamount为锁的数量,%为取余运算符。3.根据权利要求1所述的基于Redis和HBase的分锁方法,其特征在于,所述步骤2)具体为:21)在N个Redis中调用SETNX命令设置Key值;22)判断Redis中调用SETNX命令设置Key Value值的返回值是否为1,若是说明Key值设置成功,若否说明Key值设置失败;23)判断是否有大于N/2个Redis的Key值设置成功,若是则加锁成功,进入步骤3),若否则加锁失败,返回步骤1)。4.根据权利要求1所述的基于Redis和HBase的分锁方法,其特征在于,所述HBase中分锁ID对应的数据包括分锁值、用户限量值、用户注册信息以及用户历史交易信息。5.根据权利要求4所述的基于Redis和HBa...

【专利技术属性】
技术研发人员:马自谦范桢
申请(专利权)人:上海浦东发展银行股份有限公司信用卡中心
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1