CN106126673A - 一种基于Redis和HBase的分锁方法 - Google Patents
一种基于Redis和HBase的分锁方法 Download PDFInfo
- Publication number
- CN106126673A CN106126673A CN201610492958.6A CN201610492958A CN106126673A CN 106126673 A CN106126673 A CN 106126673A CN 201610492958 A CN201610492958 A CN 201610492958A CN 106126673 A CN106126673 A CN 106126673A
- Authority
- CN
- China
- Prior art keywords
- lock
- point
- redis
- hbase
- locking method
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q30/00—Commerce
- G06Q30/06—Buying, selling or leasing transactions
- G06Q30/0601—Electronic shopping [e-shopping]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Accounting & Taxation (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Finance (AREA)
- Computing Systems (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- General Business, Economics & Management (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于Redis和HBase的分锁方法,该方法利用Redis实现分布式锁并利用HBase保存数据,包括下列步骤:根据用户ID得到分锁ID;根据得到的分锁ID对Redis中的Key进行加锁;读取HBase中与所述分锁ID对应的数据;根据读取的数据进行业务逻辑判断,并根据判断结果更新HBase中分锁ID对应的数据;对加锁的Key进行解锁。与现有技术相比,本发明具有支持数据规模大,并发性高,可靠性高,性能高,面向范围广的特点。
Description
技术领域
本发明设计一种分锁秒杀方法,尤其是一种基于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)。
所述分锁限额的计算方法为:
其中,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)。
所述分锁限额的计算方法为:
其中,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 hash值%锁数量。比如获取到锁ID:Lock-1:
步骤2:根据得到的分锁ID对Redis中的Key加锁:Redis的SETNX命令设置KeyValue值,如果Key值没有存在设置成功,返回1,否则返回0。加锁过程就是使用SETNX命令,Key为:锁ID:Lock-1,Value为随机数,加锁成功则得到返回值1,否则其他应用程序已对其加锁,需要等待其他应用释放这个锁;
步骤3:读取HBase中保存的数据值:从HBase中读取分锁ID对应的值(初始值为0),用户限量值(初始值为0),还可以读取其他值供业务逻辑计算使用,比如用户注册信息、用户历史交易信息等;
步骤4:根据读取的数据值进行业务逻辑计算:根据第3步骤中读取到的数据进行业务逻辑计算,比如判断用户是否获取有资格参与抢票活动,分锁值是否已经达到限额(20)等,如果满足条件则计算分锁值(一个用户抢票成功分锁值加一),计算用户限量值(用户抢票成功用户限量值加一),完成交易支付等等业务计算;
步骤5:根据逻辑计算返回的结果更新HBase中保存的数据值:对业务逻辑中计算的结果更新到HBase中;
步骤6:对Key进行解锁:对步骤2中加锁进行解锁,也就是使用调用Redis的del命令删除锁ID(Lock-1)的值,这样其他进程调用SETNX命令可能成功。
Claims (9)
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和HBase的分锁方法,其特征在于,所述分锁值和用户限量值的初始值均为0。
6.根据权利要求5所述的基于Redis和HBase的分锁方法,其特征在于,所述业务逻辑判断包括分锁值限额判断、用户限量值限额判断以及支付交易状态判断。
7.根据权利要求6所述的基于Redis和HBase的分锁方法,其特征在于,所述步骤4)具体为:
41)判断用户限量值是否为0,若是则进入步骤42),若否则进入步骤5);
42)判断分锁值是否小于分锁限额,若是则进入步骤43),若否则进入步骤5);
43)判断支付交易状态是否为成功,若是则进入步骤44),若否则返回步骤41);
44)分别对用户限量值和分锁值加1,进入步骤5)。
8.根据权利要求7所述的基于Redis和HBase的分锁方法,其特征在于,所述分锁限额的计算方法为:
其中,Limit为分锁限额,total为秒杀总量,lockamount为锁的数量。
9.根据权利要求1所述的基于Redis和HBase的分锁方法,其特征在于,所述解锁具体为:调用Redis的DEL命令删除分锁ID。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610492958.6A CN106126673A (zh) | 2016-06-29 | 2016-06-29 | 一种基于Redis和HBase的分锁方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610492958.6A CN106126673A (zh) | 2016-06-29 | 2016-06-29 | 一种基于Redis和HBase的分锁方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106126673A true CN106126673A (zh) | 2016-11-16 |
Family
ID=57285476
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610492958.6A Pending CN106126673A (zh) | 2016-06-29 | 2016-06-29 | 一种基于Redis和HBase的分锁方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106126673A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106776816A (zh) * | 2016-11-24 | 2017-05-31 | 北京小米移动软件有限公司 | 加锁方法和装置 |
CN107124466A (zh) * | 2017-05-23 | 2017-09-01 | 努比亚技术有限公司 | 一种防止缓存穿透方法及装置、计算机可读存储介质 |
CN107562547A (zh) * | 2017-08-30 | 2018-01-09 | 郑州云海信息技术有限公司 | 一种ctdb集群***及创建方法、创建*** |
CN108133399A (zh) * | 2016-11-30 | 2018-06-08 | 北京京东尚科信息技术有限公司 | 高并发快响应的秒杀库存精准扣减的方法、装置及*** |
CN108960672A (zh) * | 2018-07-23 | 2018-12-07 | 广州唯品会信息科技有限公司 | 限额限次的风控方法、装置及计算机可读存储介质 |
CN109871380A (zh) * | 2019-01-14 | 2019-06-11 | 深圳市东信时代信息技术有限公司 | 一种基于Redis的人群包应用方法及*** |
CN110287206A (zh) * | 2019-07-01 | 2019-09-27 | 四川新网银行股份有限公司 | 构建用于Redis数据库的分布式锁的方法 |
CN110430258A (zh) * | 2019-08-01 | 2019-11-08 | 哈尔滨哈工大大数据通用技术有限公司 | 一种分布式锁管理方法和装置 |
CN113312185A (zh) * | 2021-06-09 | 2021-08-27 | 浪潮云信息技术股份公司 | 一种分布式锁 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1227644A (zh) * | 1996-08-02 | 1999-09-01 | 通讯软件有限公司 | 允许对共享资源分布式控制的方法和装置 |
CN103473267A (zh) * | 2013-08-09 | 2013-12-25 | 深圳市中科新业信息科技发展有限公司 | 数据存储查询方法及*** |
CN104657260A (zh) * | 2013-11-25 | 2015-05-27 | 航天信息股份有限公司 | 控制分布式节点间访问共享资源的分布式锁的实现方法 |
CN104809510A (zh) * | 2015-05-21 | 2015-07-29 | 武汉大学 | 一种提供票务支持的票池中间件的构建、购票及锁票方法 |
-
2016
- 2016-06-29 CN CN201610492958.6A patent/CN106126673A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1227644A (zh) * | 1996-08-02 | 1999-09-01 | 通讯软件有限公司 | 允许对共享资源分布式控制的方法和装置 |
CN103473267A (zh) * | 2013-08-09 | 2013-12-25 | 深圳市中科新业信息科技发展有限公司 | 数据存储查询方法及*** |
CN104657260A (zh) * | 2013-11-25 | 2015-05-27 | 航天信息股份有限公司 | 控制分布式节点间访问共享资源的分布式锁的实现方法 |
CN104809510A (zh) * | 2015-05-21 | 2015-07-29 | 武汉大学 | 一种提供票务支持的票池中间件的构建、购票及锁票方法 |
Non-Patent Citations (1)
Title |
---|
陈文武: ""分布式锁技术研究"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106776816A (zh) * | 2016-11-24 | 2017-05-31 | 北京小米移动软件有限公司 | 加锁方法和装置 |
CN108133399B (zh) * | 2016-11-30 | 2021-01-26 | 北京京东尚科信息技术有限公司 | 高并发快响应的秒杀库存精准扣减的方法、装置及*** |
CN108133399A (zh) * | 2016-11-30 | 2018-06-08 | 北京京东尚科信息技术有限公司 | 高并发快响应的秒杀库存精准扣减的方法、装置及*** |
CN107124466B (zh) * | 2017-05-23 | 2020-12-29 | 努比亚技术有限公司 | 一种防止缓存穿透方法及装置、计算机可读存储介质 |
CN107124466A (zh) * | 2017-05-23 | 2017-09-01 | 努比亚技术有限公司 | 一种防止缓存穿透方法及装置、计算机可读存储介质 |
CN107562547A (zh) * | 2017-08-30 | 2018-01-09 | 郑州云海信息技术有限公司 | 一种ctdb集群***及创建方法、创建*** |
CN108960672A (zh) * | 2018-07-23 | 2018-12-07 | 广州唯品会信息科技有限公司 | 限额限次的风控方法、装置及计算机可读存储介质 |
CN108960672B (zh) * | 2018-07-23 | 2023-01-03 | 上海品唯信息技术有限公司 | 限额限次的风控方法、装置及计算机可读存储介质 |
CN109871380A (zh) * | 2019-01-14 | 2019-06-11 | 深圳市东信时代信息技术有限公司 | 一种基于Redis的人群包应用方法及*** |
CN109871380B (zh) * | 2019-01-14 | 2022-11-11 | 深圳市东信时代信息技术有限公司 | 一种基于Redis的人群包应用方法及*** |
CN110287206A (zh) * | 2019-07-01 | 2019-09-27 | 四川新网银行股份有限公司 | 构建用于Redis数据库的分布式锁的方法 |
CN110430258A (zh) * | 2019-08-01 | 2019-11-08 | 哈尔滨哈工大大数据通用技术有限公司 | 一种分布式锁管理方法和装置 |
CN113312185A (zh) * | 2021-06-09 | 2021-08-27 | 浪潮云信息技术股份公司 | 一种分布式锁 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106126673A (zh) | 一种基于Redis和HBase的分锁方法 | |
US10248691B2 (en) | Read/write split database query routing | |
US8051034B2 (en) | Parallel processing of assigned table partitions | |
CN110020542B (zh) | 数据读写方法及装置、电子设备 | |
EP2930629A1 (en) | Accessing non-relational data stores using structured query language queries | |
US11055792B2 (en) | Blockchain-based service source tracing method, apparatus, and electronic device | |
KR20170097132A (ko) | 데이터베이스에서의 계좌와 관련된 거래 요청의 효율적인 처리를 위한 시스템 | |
WO2021208461A1 (zh) | 共享柜的物品更换方法、服务器及共享柜 | |
CN108415990B (zh) | 数据质量监控方法、装置、计算机设备和存储介质 | |
CN107179940A (zh) | 一种任务执行的方法及装置 | |
CN101478423A (zh) | 一种基于数据库的无刷新告警自动监测技术 | |
CN107644263A (zh) | 银行业务预约办理方法及服务器 | |
CN103412922B (zh) | 一种数据查询处理方法 | |
Elçi et al. | Efficient simulation of the random-cluster model | |
US10949863B1 (en) | System and method for account abuse risk analysis | |
CN106294090A (zh) | 一种数据统计方法和装置 | |
CN109272403A (zh) | 一种支持数字货币交易的方法和装置 | |
US10467193B1 (en) | Real-time ad hoc querying of data records | |
Parwani | Information measures for inferring quantum mechanics | |
CN106874327B (zh) | 一种针对业务数据的计数方法及装置 | |
CN106411955B (zh) | 一种基于模m同余类环的账号生成方法 | |
CN111857670A (zh) | 应用架构的确定方法和装置 | |
CN110543459A (zh) | 一种nfs下文件锁状态获取方法、***、终端及存储介质 | |
CN116132528B (zh) | 一种航班管理消息的推送方法、装置及电子设备 | |
CN108074086A (zh) | 计费*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20161116 |
|
RJ01 | Rejection of invention patent application after publication |