CN110262898A - 一种业务请求的处理方法及客户端 - Google Patents
一种业务请求的处理方法及客户端 Download PDFInfo
- Publication number
- CN110262898A CN110262898A CN201910532260.6A CN201910532260A CN110262898A CN 110262898 A CN110262898 A CN 110262898A CN 201910532260 A CN201910532260 A CN 201910532260A CN 110262898 A CN110262898 A CN 110262898A
- Authority
- CN
- China
- Prior art keywords
- business
- client
- lock
- locks
- request
- 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.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 17
- 230000005540 biological transmission Effects 0.000 claims abstract description 50
- 238000000034 method Methods 0.000 claims abstract description 30
- 238000012545 processing Methods 0.000 claims description 14
- 230000004888 barrier function Effects 0.000 claims description 4
- 230000001351 cycling effect Effects 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 5
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明提供一种业务请求的处理方法及客户端,该方法为:客户端向N个redis集群发送获取业务锁的请求,业务锁用于锁定客户端需执行的业务;确定是否成功获取所有业务锁;若未成功获取所有业务锁,在预设时间段内向N个redis集群循环发送获取业务锁的请求;若成功获取所有业务锁,执行业务。本方案中,客户端同时向多个redis集群发送获取业务锁的请求,只有获取所有业务锁才能执行客户端需执行的业务,避免多个线程重复执行业务,保证业务数据的一致性。若没有获取所有业务锁,则在预设时间段内循环请求获取所有业务锁,提高获取业务锁的效率和成功率。
Description
技术领域
本发明涉及数据处理技术领域,具体涉及一种业务请求的处理方法及客户端。
背景技术
随着互联网技术的发展,各式各样的互联网应用被开发出来,以满足各类人群的需求。
目前,绝大多数的互联网应用的后台服务都是分布式部署的,对于分布式场景而言,需要保证业务数据的一致性。但是,分布式场景中存在多个线程,在执行用户的业务请求时,多个线程可能出现重复执行用户的业务请求的情况,从而导致业务数据不一致。例如:用户下单购买某一物品,多个线程在执行下单业务时可能出现重复下单的情况。
因此,目前需引入一种新的处理业务请求的方法,以避免在执行用户的业务请求时,多个线程出现重复执行业务请求的情况。
发明内容
有鉴于此,本发明实施例提供一种业务请求的处理方法及客户端,以解决在执行用户的业务请求时,多个线程出现重复执行业务请求的情况。
为实现上述目的,本发明实施例提供如下技术方案:
本发明实施例第一方面公开一种业务请求的处理方法,适用于客户端,所述方法包括:
客户端向N个redis集群发送获取业务锁的请求,所述业务锁用于锁定所述客户端需执行的业务,一个redis集群对应一个业务锁,N为大于等于2的整数,所述请求至少包括业务锁的过期时长;
确定是否成功获取所有业务锁;
若未成功获取所有业务锁,在预设时间段内向N个所述redis集群循环发送获取业务锁的请求;
若成功获取所有业务锁,执行所述业务。
优选的,所述若未成功获取所有业务锁之后,还包括:
所述客户端向所述redis集群发送业务锁释放请求,释放已获取的业务锁。
优选的,所述执行所述业务包括:
所述客户端基于所述过期时长执行所述业务;
若在所述过期时长到达前执行完成业务,确定业务执行成功;
若在所述过期时长到达时未执行完成所述业务,确定业务执行失败或客户端故障。
优选的,确定未成功获取所有所述业务锁的过程,包括:
若所述客户端在预设时长内未接收到所有业务锁,确定未成功获取所有所述业务锁;
或者,
若所述客户端接收每个所述redis集群发送的占用信息,确定未成功获取所有所述业务锁,所述占用信息指示所述业务锁被其它客户端占用。
本发明实施例第二方面公开一种客户端,所述客户端包括:
发送单元,用于向N个redis集群发送获取业务锁的请求,其中,所述业务锁用于锁定所述客户端需执行的业务,一个redis集群对应一个业务锁,N为大于等于2的整数,所述请求至少包括业务锁的过期时长;
确定单元,用于确定是否成功获取所有业务锁;
循环单元,用于若未成功获取所有业务锁,在预设时间段内向N个所述redis集群循环发送获取业务锁的请求;
处理单元,用于若成功获取所有业务锁,执行所述业务。
优选的,所述客户端还包括:
释放单元,用于在未成功获取所有业务锁之后,向所述redis集群发送业务锁释放请求,释放已获取的业务锁。
优选的,所述处理单元具体用于:
基于所述过期时长执行所述业务,若在所述过期时长到达前执行完成业务,确定业务执行成功,若在所述过期时长到达时未执行完成所述业务,确定业务执行失败或客户端故障。
优选的,所述确定单元包括:
第一确定模块,用于若所述客户端在预设时长内未接收到所有业务锁,确定未成功获取所有所述业务锁;
第二确定模块,用于若所述客户端接收每个所述redis集群发送的占用信息,确定未成功获取所有所述业务锁,所述占用信息指示所述业务锁被其它客户端占用。
本发明实施例第三方面公开一种电子设备,所述电子设备用于运行程序,其中,所述程序运行时执行如本发明实施例第一方面公开的一种业务请求的处理方法。
本发明实施例第四方面公开一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行如本发明实施例第一方面公开的一种业务请求的处理方法。
基于上述本发明实施例提供的一种业务请求的处理方法及客户端,该方法为:客户端向N个redis集群发送获取业务锁的请求,业务锁用于锁定客户端需执行的业务;确定是否成功获取所有业务锁;若未成功获取所有业务锁,客户端在预设时间段内向N个redis集群循环发送获取业务锁的请求;若成功获取所有业务锁,客户端执行业务。本方案中,客户端同时向多个redis集群发送获取业务锁的请求,只有获取所有业务锁才能执行客户端需执行的业务,避免多个线程重复执行业务,保证业务数据的一致性。若没有获取所有业务锁,则在预设时间段内循环请求获取所有业务锁,提高获取业务锁的效率和成功率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的一种业务请求的处理方法流程图;
图2为本发明实施例提供的请求获取业务锁的流程示意图;
图3为本发明实施例提供的一种客户端的结构框图;
图4为本发明实施例提供的另一种客户端的结构框图;
图5为本发明实施例提供的又一种客户端的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
由背景技术可知,目前分布式场景中存在多个线程,在执行用户的业务请求时,多个线程可能出现重复执行用户的业务请求的情况,从而导致业务数据不一致。
因此,本发明实施例提供一种业务请求的处理方法及客户端,客户端同时向多个redis集群发送获取业务锁的请求,只有获取所有业务锁才能执行客户端需执行的业务,以避免多个线程重复执行业务,从而保证业务数据的一致性。
在本发明实施例中涉及到的redis集群包括一个主节点和至少一个从节点,redis集群的主从节点切换指:当redis集群的主节点由于网络异常等问题挂掉后,该redis集群的其中一个从节点切换为主节点。
参考图1,示出了本发明实施例提供的一种业务请求的处理方法,所述方法适用于客户端,所述方法包括以下步骤:
步骤S101:客户端向N个redis集群发送获取业务锁的请求。
需要说明的是,一个redis集群对应一个业务锁,所述业务锁用于锁定所述客户端需执行的业务,所述客户端只有在获取到所述业务锁之后才能执行相应的业务。所述请求至少包括:客户端的ID和业务锁的过期时长,例如:客户端利用伪代码“SETNX Key UniqIDSeconds”向N个redis集群获取所述业务锁,其中,Key表示获取业务锁,UniqID为Key对应的value,表示客户端的ID,Seconds表示所述过期时长,所述客户端的ID与所述客户端请求获取的业务锁存在对应关系。
在具体实现步骤S101的过程中,N为大于等于2的整数,所述客户端向N个redis集群发送获取业务锁的请求,若所述请求成功写入所述redis集群中的主节点,所述redis集群会将对应的业务锁发送给所述客户端。
步骤S102:所述客户端确定是否成功获取所有业务锁,若是,执行步骤S103,若否,执行步骤S104。
在具体实现步骤S102的过程中,若所述客户端在预设时长内未接收到所有业务锁,确定未成功获取所有所述业务锁。由上述内容可知,所述请求成功写入所述redis集群中的主节点之后所述客户端才能获取相应的业务锁,则所述客户端未成功获取所有所述业务锁包括但不限于以下两种情况:
情况一:所述请求成功写入0个所述redis集群,则所述客户端获取0个业务锁。
情况二:所述请求成功写入N个redis集群中的一部分redis集群,另一部分redis集群未成功写入所述请求,所述客户端只获取到部分业务锁。
优选的,若所述客户端只获取到部分业务锁,所述客户端调用release锁操作,向成功获取的业务锁对应的redis集群发送业务锁释放请求,使所述redis集群释放已获取的业务锁。例如:假设N为2,redis集群分别为第一redis集群和第二redis集群,所述请求成功写入所述第一redis集群,未成功写入所述第二redis集群,则所述客户端只获取所述第一redis集群发送的业务锁,所述客户端调用release锁操作,向所述第一redis集群发送业务锁释放请求,释放已获取的所述第一redis集群对应的业务锁。
需要说明的是,由上述内容可知,所述客户端的ID与所述客户端请求获取的业务锁存在对应关系,因此在释放业务所述时,所述客户端需根据自身的ID释放对应的业务锁。
进一步的,需要说明的是,N个redis集群会接收多个客户端发送的获取业务锁的请求,每个redis集群中的业务锁只能发送给一个客户端,即多个客户端不能同时共用每个redis集群中的业务锁。
在具体实现步骤S102的过程中,每个所述redis集群的业务锁可能正在被其它客户端使用,若所述客户端接收每个所述redis集群发送的占用信息,确定未成功获取所有所述业务锁,所述占用信息指示所述业务锁被其它客户端占用。
步骤S103:所述客户端执行所述业务。
在具体实现步骤S103的过程中,若所述客户端成功获取所有业务锁,即表示所述客户端需执行的业务已被锁定,所述客户端执行所述业务。
优选的,由上述内容可知,所述客户端向每个redis集群发送的请求中包含业务锁的过期时长,所述客户端基于所述过期时长执行所述业务,若在所述过期时长到达前执行完成业务,确定业务执行成功。若在所述过期时长到达时未执行完成所述业务,确定业务执行失败或客户端故障。例如:设置业务锁的过期时长为1分钟,所述客户端在接收到所有业务锁后,若在1分钟内执行完成业务,确定业务执行成功。若在1分钟后所述客户端未执行完成所述业务,确定业务执行失败或客户端故障。
需要说明的是,由上述内容可知,每个redis集群中的业务锁只能用于一个客户端。因此,所述客户端在获取所有业务锁之后,无论是否成功执行完成业务,都需要释放所有业务锁,以供其它客户端使用。当所述客户端执行成功所述业务,所述客户端调用release锁操作,向所有所述redis集群发送业务锁释放请求,释放所有业务锁。当所述过期时长到达时,所述客户端未执行完成所述业务,每个redis集群自动销毁各自对应的业务锁。
步骤S104:所述客户端在预设时间段内向N个所述redis集群循环发送获取业务锁的请求。
在具体实现步骤S104的过程中,由上述内容可知所述客户端无法获取所有业务锁存在两种情况,一种为所述请求未成功写入所有redis集群,另一种为其它客户端正在使用所有redis集群中的业务锁。但是,上述两种情况最终都会释放业务锁,因此所述客户端通过在预设时间段内向N个所述redis集群周期循环发送获取业务锁的请求,提高获取所有业务锁的成功率和效率。例如:假设所有redis集群的业务锁正在被其它客户端占用,所述客户端在200毫秒内,每隔50毫秒发送一次所述请求,其它客户端在第120毫秒时释放所有业务锁,则所述客户端在150毫秒时发送所述请求成功获取所有业务锁,并执行相应的业务。
在本发明实施例中,客户端同时向多个redis集群发送获取业务锁的请求,只有获取所有业务锁才能执行客户端需执行的业务,避免多个线程重复执行业务,保证业务数据的一致性。若没有获取所有业务锁,则在预设时间段内循环请求获取所有业务锁,提高获取业务锁的效率和成功率。
优选的,在执行上述图1步骤S101时,若N个redis集群中的一个以上redis集群出现主从节点切换的情况,所述客户端获取业务锁的过程包括但不仅限于:所述客户端在redis集群进行主从节点切换之前发送所述请求、所述客户端在redis集群进行主从节点切换之时发送所述请求、以及所述客户端在redis集群进行主从节点切换之后发送所述请求。具体内容通过以下三种情况进行举例说明:
假设N为2,N个redis集群包括第一redis集群和第二redis集群,其中,所述第一redis集群发生主从节点切换。
情况一:所述第一redis集群在进行主从节点切换之前,所述第一redis集群和第二redis集群的主节点都接收到所述客户端发送的请求,并将业务锁发送给所述客户端。所述第一redis集群在完成主从节点切换,并且所述客户端执行完成业务,所述客户端调用release锁操作,分别向所述第一redis集群和第二redis集群发送业务锁释放请求,释放业务锁。但是,由于所述请求是发送给所述第一redis集群的原主节点,在进行主从节点切换之后,此时所述第一redis集群的原主节点已经挂掉,无法接收到所述业务锁释放请求,所述第一redis集群不能释放自身的业务锁。因此,所述第二redis集群基于所述业务锁释放请求释放自身的业务锁,所述第一redis集群只有等待自身的业务锁的超期时长到期,自动释放自身的业务锁。
情况二:所述第一redis集群在进行主从节点切换之时,所述客户端向所述第一redis集群和第二redis集群发送获取业务锁的请求。所述第一redis集群无法向所述客户端反馈业务锁,所述第二redis集群成功向所述客户端反馈业务锁。所述客户端释放所述第二redis集群对应的业务锁,并在预设时间段内重复向所述第一redis集群和第二redis集群发送获取业务锁的请求,直至在预设时间段内所述第一redis集群完成主从节点切换后,成功获取所述第一redis集群和第二redis集群的业务锁。或者,在预设时间段内所述第一redis集群未完成主从节点切换,所述客户端无法获取所述第一redis集群和第二redis集群的业务锁。
情况三:所述第一redis集群在进行主从节点切换之后,所述客户端向所述第一redis集群和第二redis集群发送获取业务锁的请求,具体情况如上述本发明实施例图1中各个步骤示出的内容,在此不再进行赘述。
为更好解释说明上述图1各个步骤涉及的内容,结合图1中示出的内容,通过图2示出的内容进行举例说明。
需要说明的是,所述图2中,存在两个redis集群,分别为Redis集群1和Redis集群2。存在两个客户端,分别Client1和Client2。数字1、2、3、4、5、6、7和8分别指执行步骤。
所述图2的步骤1和步骤2中,所述Client1向所述Redis集群1和Redis集群2发送获取业务锁的请求,所述Client1成功获取所述Redis集群1和Redis集群2的业务锁。其中,所述Client1发送的请求中的Key对应的所述Client1的ID为Uniqid1。
所述图2的步骤3和步骤4中,在所述Client1为执行完业务之前。所述Client2向所述Redis集群1和Redis集群2发送获取业务锁的请求,所述Redis集群1和Redis集群2向所述Client2反馈加锁失败的消息。在步骤3和步骤4中,所述Client2在预设时间段内循环向所述Redis集群1和Redis集群2发送获取业务锁的请求。在步骤5和步骤6中,当所述Client1成功执行完业务后,Client1释放所述Redis集群1和Redis集群2对应的业务锁。在步骤7和步骤8中,所述Client2再次向所述Redis集群1和Redis集群2发送获取业务锁的请求,成功获取所述Redis集群1和Redis集群2的业务锁,加锁成功。
需要说明的是,图2中示出的内容仅适用于举例说明。
在本发明实施例中,客户端同时向两个redis集群发送获取业务锁的请求,获取两个业务锁后执行需执行的业务,避免多个线程重复执行业务,保证业务数据的一致性。若业务锁被其它客户端占用时,则在预设时间段内循环请求获取所有业务锁,提高获取业务锁的效率和成功率。
与上述本发明实施例公开的一种业务请求的处理方法相对应,参考图3,本发明实施例还提供一种客户端的结构框图,所述客户端包括:发送单元301、确定单元302、循环单元303和处理单元304。
发送单元301,用于向N个redis集群发送获取业务锁的请求,其中,所述业务锁用于锁定所述客户端需执行的业务,一个redis集群对应一个业务锁,N为大于等于2的整数,所述请求至少包括业务锁的过期时长。获取所述业务锁的具体过程参见上述本发明实施例图1步骤S101中相对应的内容。
确定单元302,用于确定是否成功获取所有业务锁;
循环单元303,用于若未成功获取所有业务锁,在预设时间段内向N个所述redis集群循环发送获取业务锁的请求。循环发送获取业务锁的请求的过程参见上述本发明实施例图1步骤S104中相对应的内容。
处理单元304,用于若成功获取所有业务锁,执行所述业务。
在具体实现中,所述处理单元304具体用于:基于所述过期时长执行所述业务,若在所述过期时长到达前执行完成业务,确定业务执行成功,若在所述过期时长到达时未执行完成所述业务,确定业务执行失败或客户端故障。具体过程参见上述本发明实施例图1步骤S103中相对应的内容。
在本发明实施例中,客户端同时向多个redis集群发送获取业务锁的请求,只有获取所有业务锁才能执行客户端需执行的业务,避免多个线程重复执行业务,保证业务数据的一致性。若没有获取所有业务锁,则在预设时间段内循环请求获取所有业务锁,提高获取业务锁的效率和成功率。
优选的,结合图3,参考图4,本发明实施例提供了一种客户端的结构框图,所述客户端还包括:
释放单元305,用于在未成功获取所有业务锁之后,向所述redis集群发送业务锁释放请求,释放已获取的业务锁。
优选的,结合图3,参考图5,本发明实施例提供了一种客户端的结构框图,所述确定单元302包括:
第一确定模块3021,用于若所述客户端在预设时长内未接收到所有业务锁,确定未成功获取所有所述业务锁。
第二确定模块3022,用于若所述客户端接收每个所述redis集群发送的占用信息,确定未成功获取所有所述业务锁,所述占用信息指示所述业务锁被其它客户端占用。
在本发明实施例中,若客户端在预设时长内未接收到所有业务锁,或接收到用于指示其它客户端占用业务锁的占用信息,确定客户端未成功获取所有业务锁。客户端在预设时间段内循环请求获取所有业务锁,提高获取业务锁的效率和成功率。
基于上述本发明实施例公开的一种客户端,上述各个模块可以通过一种由处理器和存储器构成的电子设备实现。具体为:上述各个模块作为程序单元存储于存储器中,由处理器执行存储在存储器中的上述程序单元来实现业务请求的处理。
其中,处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来实现业务请求的处理。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
进一步的,本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行业务请求的处理方法。
进一步的,本发明实施例提供了一种电子设备,所述电子设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现以下步骤:客户端向N个redis集群发送获取业务锁的请求,所述业务锁用于锁定所述客户端需执行的业务,一个redis集群对应一个业务锁,N为大于等于2的整数,所述请求至少包括业务锁的过期时长;确定是否成功获取所有业务锁;若未成功获取所有业务锁,在预设时间段内向N个所述redis集群循环发送获取业务锁的请求;若成功获取所有业务锁,执行所述业务。
进一步的,所述若未成功获取所有业务锁之后,还包括:
所述客户端向所述redis集群发送业务锁释放请求,释放已获取的业务锁。
其中,所述执行所述业务包括:
所述客户端基于所述过期时长执行所述业务;
若在所述过期时长到达前执行完成业务,确定业务执行成功;
若在所述过期时长到达时未执行完成所述业务,确定业务执行失败或客户端故障。
其中,确定未成功获取所有所述业务锁的过程,包括:
若所述客户端在预设时长内未接收到所有业务锁,确定未成功获取所有所述业务锁;
或者,
若所述客户端接收每个所述redis集群发送的占用信息,确定未成功获取所有所述业务锁,所述占用信息指示所述业务锁被其它客户端占用。
本发明实施例中公开的设备可以是PC、PAD、手机等。
进一步的,本发明实施例还提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现业务请求的处理。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:客户端向N个redis集群发送获取业务锁的请求,所述业务锁用于锁定所述客户端需执行的业务,一个redis集群对应一个业务锁,N为大于等于2的整数,所述请求至少包括业务锁的过期时长;确定是否成功获取所有业务锁;若未成功获取所有业务锁,在预设时间段内向N个所述redis集群循环发送获取业务锁的请求;若成功获取所有业务锁,执行所述业务。
进一步的,所述若未成功获取所有业务锁之后,还包括:
所述客户端向所述redis集群发送业务锁释放请求,释放已获取的业务锁。
其中,所述执行所述业务包括:
所述客户端基于所述过期时长执行所述业务;
若在所述过期时长到达前执行完成业务,确定业务执行成功;
若在所述过期时长到达时未执行完成所述业务,确定业务执行失败或客户端故障。
其中,确定未成功获取所有所述业务锁的过程,包括:
若所述客户端在预设时长内未接收到所有业务锁,确定未成功获取所有所述业务锁;
或者,
若所述客户端接收每个所述redis集群发送的占用信息,确定未成功获取所有所述业务锁,所述占用信息指示所述业务锁被其它客户端占用。
综上所述,本发明实施例提供一种业务请求的处理方法及客户端,该方法为:客户端向N个redis集群发送获取业务锁的请求,业务锁用于锁定客户端需执行的业务;确定是否成功获取所有业务锁;若未成功获取所有业务锁,客户端在预设时间段内向N个redis集群循环发送获取业务锁的请求;若成功获取所有业务锁,客户端执行业务。本方案中,客户端同时向多个redis集群发送获取业务锁的请求,只有获取所有业务锁才能执行客户端需执行的业务,避免多个线程重复执行业务,保证业务数据的一致性。若没有获取所有业务锁,则在预设时间段内循环请求获取所有业务锁,提高获取业务锁的效率和成功率。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种业务请求的处理方法,其特征在于,适用于客户端,所述方法包括:
客户端向N个redis集群发送获取业务锁的请求,所述业务锁用于锁定所述客户端需执行的业务,一个redis集群对应一个业务锁,N为大于等于2的整数,所述请求至少包括业务锁的过期时长;
确定是否成功获取所有业务锁;
若未成功获取所有业务锁,在预设时间段内向N个所述redis集群循环发送获取业务锁的请求;
若成功获取所有业务锁,执行所述业务。
2.根据权利要求1所述的方法,其特征在于,所述若未成功获取所有业务锁之后,还包括:
所述客户端向所述redis集群发送业务锁释放请求,释放已获取的业务锁。
3.根据权利要求1所述的方法,其特征在于,所述执行所述业务包括:
所述客户端基于所述过期时长执行所述业务;
若在所述过期时长到达前执行完成业务,确定业务执行成功;
若在所述过期时长到达时未执行完成所述业务,确定业务执行失败或客户端故障。
4.根据权利要求1-3中任一所述的方法,其特征在于,确定未成功获取所有所述业务锁的过程,包括:
若所述客户端在预设时长内未接收到所有业务锁,确定未成功获取所有所述业务锁;
或者,
若所述客户端接收每个所述redis集群发送的占用信息,确定未成功获取所有所述业务锁,所述占用信息指示所述业务锁被其它客户端占用。
5.一种客户端,其特征在于,所述客户端包括:
发送单元,用于向N个redis集群发送获取业务锁的请求,其中,所述业务锁用于锁定所述客户端需执行的业务,一个redis集群对应一个业务锁,N为大于等于2的整数,所述请求至少包括业务锁的过期时长;
确定单元,用于确定是否成功获取所有业务锁;
循环单元,用于若未成功获取所有业务锁,在预设时间段内向N个所述redis集群循环发送获取业务锁的请求;
处理单元,用于若成功获取所有业务锁,执行所述业务。
6.根据权利要求5所述的客户端,其特征在于,所述客户端还包括:
释放单元,用于在未成功获取所有业务锁之后,向所述redis集群发送业务锁释放请求,释放已获取的业务锁。
7.根据权利要求5所述的客户端,其特征在于,所述处理单元具体用于:
基于所述过期时长执行所述业务,若在所述过期时长到达前执行完成业务,确定业务执行成功,若在所述过期时长到达时未执行完成所述业务,确定业务执行失败或客户端故障。
8.根据权利要求5-7中任一所述的客户端,其特征在于,所述确定单元包括:
第一确定模块,用于若所述客户端在预设时长内未接收到所有业务锁,确定未成功获取所有所述业务锁;
第二确定模块,用于若所述客户端接收每个所述redis集群发送的占用信息,确定未成功获取所有所述业务锁,所述占用信息指示所述业务锁被其它客户端占用。
9.一种电子设备,其特征在于,所述电子设备用于运行程序,其中,所述程序运行时执行如权利要求1-4中任一所述的一种业务请求的处理方法。
10.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行如权利要求1-4中任一所述的一种业务请求的处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910532260.6A CN110262898B (zh) | 2019-06-19 | 2019-06-19 | 一种业务请求的处理方法及客户端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910532260.6A CN110262898B (zh) | 2019-06-19 | 2019-06-19 | 一种业务请求的处理方法及客户端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110262898A true CN110262898A (zh) | 2019-09-20 |
CN110262898B CN110262898B (zh) | 2021-01-29 |
Family
ID=67919489
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910532260.6A Active CN110262898B (zh) | 2019-06-19 | 2019-06-19 | 一种业务请求的处理方法及客户端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110262898B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112256443A (zh) * | 2020-10-14 | 2021-01-22 | 杭州当虹科技股份有限公司 | 一种基于redis的动态集群锁系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103744719A (zh) * | 2013-12-30 | 2014-04-23 | 华为技术有限公司 | 锁管理方法及系统、锁管理系统的配置方法及装置 |
CN107544850A (zh) * | 2016-06-29 | 2018-01-05 | 百度在线网络技术(北京)有限公司 | 用于控制分布式锁的方法和装置 |
CN107562547A (zh) * | 2017-08-30 | 2018-01-09 | 郑州云海信息技术有限公司 | 一种ctdb集群系统及创建方法、创建系统 |
CN107818018A (zh) * | 2016-09-14 | 2018-03-20 | 北京京东尚科信息技术有限公司 | 分布式锁的控制方法和装置 |
US20180276304A1 (en) * | 2015-09-21 | 2018-09-27 | Yissum Research Development Company Of The Hebrew University Of Jerusalem Ltd | Advanced computer implementation for crawling and/or detecting related electronically catalogued data using improved metadata processing |
CN109558218A (zh) * | 2018-12-04 | 2019-04-02 | 山东浪潮通软信息科技有限公司 | 一种基于Redis的分布式业务数据锁实现方法 |
-
2019
- 2019-06-19 CN CN201910532260.6A patent/CN110262898B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103744719A (zh) * | 2013-12-30 | 2014-04-23 | 华为技术有限公司 | 锁管理方法及系统、锁管理系统的配置方法及装置 |
US20180276304A1 (en) * | 2015-09-21 | 2018-09-27 | Yissum Research Development Company Of The Hebrew University Of Jerusalem Ltd | Advanced computer implementation for crawling and/or detecting related electronically catalogued data using improved metadata processing |
CN107544850A (zh) * | 2016-06-29 | 2018-01-05 | 百度在线网络技术(北京)有限公司 | 用于控制分布式锁的方法和装置 |
CN107818018A (zh) * | 2016-09-14 | 2018-03-20 | 北京京东尚科信息技术有限公司 | 分布式锁的控制方法和装置 |
CN107562547A (zh) * | 2017-08-30 | 2018-01-09 | 郑州云海信息技术有限公司 | 一种ctdb集群系统及创建方法、创建系统 |
CN109558218A (zh) * | 2018-12-04 | 2019-04-02 | 山东浪潮通软信息科技有限公司 | 一种基于Redis的分布式业务数据锁实现方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112256443A (zh) * | 2020-10-14 | 2021-01-22 | 杭州当虹科技股份有限公司 | 一种基于redis的动态集群锁系统 |
CN112256443B (zh) * | 2020-10-14 | 2024-02-06 | 杭州当虹科技股份有限公司 | 一种基于redis的动态集群锁系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110262898B (zh) | 2021-01-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108874562B (zh) | 分布式高并发消息队列推送系统 | |
JP4857374B2 (ja) | タスクを割り当てる方法、データ処理システム、クライアントデータ処理ノードおよび機械可読記憶媒体 | |
US8713163B2 (en) | Monitoring cloud-runtime operations | |
US6141720A (en) | Method and apparatus for coordination of a shared object in a distributed system | |
US9170851B2 (en) | Connection distribution for load balancing in a distributed database | |
Bruno et al. | Retrofitting Quality of Service into a Time-Sharing Operating System. | |
CN104685852B (zh) | 用于使用请求的小批处理的系统和方法 | |
EP0384339A2 (en) | Broker for computer network server selection | |
US20050175027A1 (en) | System and method for requesting and granting access to a network channel | |
JP2002324047A (ja) | 分散クライアント/サーバ環境での自動化セッション・リソース・クリーンアップの方法およびシステム。 | |
CN111338773A (zh) | 一种分布式定时任务调度方法、调度系统及服务器集群 | |
CN106681840A (zh) | 一种云操作系统的任务调度方法及装置 | |
CN101702735A (zh) | 一种tcp服务装置及方法 | |
CN108900607A (zh) | 一种smb协议请求的处理方法、装置及服务器 | |
WO1997022208A2 (en) | Providing access to services in a telecommunications system | |
CN110262898A (zh) | 一种业务请求的处理方法及客户端 | |
CN112506647A (zh) | 有状态服务器负载均衡的方法、系统、装置和存储介质 | |
CN109947081B (zh) | 网联车辆控制方法及装置 | |
CN108243205A (zh) | 一种用于控制云平台资源分配的方法、设备与系统 | |
EP1611523A2 (en) | Controlling usage of system resources by a network manager | |
CN106021026A (zh) | 一种备份方法及装置 | |
CN107679817B (zh) | 工作流执行方法及相关设备 | |
EP1197858B1 (en) | Method and device for offering resources in an internet appliance | |
Bhattacharya | Mobile agent based elastic executor service | |
CN110209474A (zh) | 任务处理的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
EE01 | Entry into force of recordation of patent licensing contract | ||
EE01 | Entry into force of recordation of patent licensing contract |
Application publication date: 20190920 Assignee: GUANGZHOU CUBESILI INFORMATION TECHNOLOGY Co.,Ltd. Assignor: GUANGZHOU HUADUO NETWORK TECHNOLOGY Co.,Ltd. Contract record no.: X2021440000032 Denomination of invention: A service request processing method and client License type: Common License Record date: 20210125 |