CN106126673A - 一种基于Redis和HBase的分锁方法 - Google Patents

一种基于Redis和HBase的分锁方法 Download PDF

Info

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
Application number
CN201610492958.6A
Other languages
English (en)
Inventor
马自谦
范桢
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Pudong Development Bank Co Ltd Credit Card Center
Original Assignee
Shanghai Pudong Development Bank Co Ltd Credit Card Center
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Pudong Development Bank Co Ltd Credit Card Center filed Critical Shanghai Pudong Development Bank Co Ltd Credit Card Center
Priority to CN201610492958.6A priority Critical patent/CN106126673A/zh
Publication of CN106126673A publication Critical patent/CN106126673A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2336Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
    • G06F16/2343Locking methods, e.g. distributed locking or locking implementation details
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION 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/00Commerce
    • G06Q30/06Buying, selling or leasing transactions
    • G06Q30/0601Electronic 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的分锁方法
技术领域
本发明设计一种分锁秒杀方法,尤其是一种基于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 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的分锁方法,其特征在于,所述分锁限额的计算方法为:
L i m i t = t o t a l l o c k a m o u n t
其中,Limit为分锁限额,total为秒杀总量,lockamount为锁的数量。
9.根据权利要求1所述的基于Redis和HBase的分锁方法,其特征在于,所述解锁具体为:调用Redis的DEL命令删除分锁ID。
CN201610492958.6A 2016-06-29 2016-06-29 一种基于Redis和HBase的分锁方法 Pending CN106126673A (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 武汉大学 一种提供票务支持的票池中间件的构建、购票及锁票方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Title
陈文武: ""分布式锁技术研究"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *

Cited By (13)

* Cited by examiner, † Cited by third party
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