订单防重方法及装置与流程

文档序号:31708867发布日期:2022-10-01 13:56阅读:140来源:国知局
订单防重方法及装置与流程

1.本公开涉及数据处理技术领域,具体涉及到一种订单防重方法及装置。


背景技术:

2.在互联网应用中,客户端和服务器之间,通过各类应用介质向服务器提交表单的时候,通常用户点击提交数据的按钮来触发客户端上的数据提交操作;由于连点、网络延迟等影响,用户会出现误操作,连续多次点击提交操作,那么就有可能出现重复订单信息。
3.而相关技术中,实现防止订单重复提交的方法通常存在前后端交互处理逻辑,进而前后端的改造成本高,且防重效果仍然不佳。


技术实现要素:

4.本公开的主要目的在于提供一种订单防重方法及装置。
5.为了实现上述目的,根据本公开的第一方面,提供了一种订单防重方法,包括:在接收到订单提交请求后组装识别码,以唯一标识所述订单;基于缓存中设置的锁机制、以及识别码,对当前所述订单是否存在重复进行判断;如果不存在重复,则当订单提交请求指示的业务处理完毕后,将所述订单存入数据库中,其中,所述数据库中预先设置有索引机制;基于所述识别码,利用所述索引机制判断所述订单是否重复。
6.可选地,基于缓存中设置的锁机制、以及识别码,对当前所述订单是否存在重复进行判断包括:
7.基于提交的订单所对应的识别码,判断该订单当前是否已经被加锁处理过;
8.如果未被加锁处理过,则对提交的订单进行加锁处理,并赋予加锁值,其中,每个订单对应的标识码可映射一个加锁值;
9.如果被加锁处理过,则当前所述订单存在重复。
10.可选地,在将所述订单存入数据库中之前,所述方法还包括:当订单的业务处理完毕后,对经加锁处理后的订单锁进行释放。
11.可选地,在锁机制中还对加锁时长进行设置,当订单的加锁时长达到目标值后,对加锁处理后的订单锁进行释放。
12.可选地,基于所述识别码,利用所述唯一索引机制判断所述订单是否重复。
13.可选地,基于所述识别码,利用所述唯一索引机制判断所述订单是否重复包括:将所述识别码所做索引,在数据库中查找是否存在与该索引相同的字段;如果不存在,则存入所述订单以继续实现订单相关的业务处理;如果存在,则判断订单为重复订单。
14.根据本公开的第二方面,提供了一种订单防重装置,包括:识别码确定单元,被配置成在接收到订单提交请求后组装识别码,以唯一标识所述订单;第一防重单元,基于缓存中设置的锁机制、以及识别码,对当前所述订单是否存在重复进行判断;第二防重单元,如果不存在重复,则当订单提交请求指示的业务处理完毕后,将所述订单存入数据库中,其中,所述数据库中预先设置有索引机制;基于所述识别码,利用所述索引机制判断所述订单
是否重复。
15.可选地,基于缓存中设置的锁机制、以及识别码,对当前所述订单是否存在重复进行判断包括:基于提交的订单所对应的识别码,判断该订单当前是否已经被加锁处理过;如果未被加锁处理过,则对提交的订单进行加锁处理,并赋予加锁值,其中,每个订单对应的标识码可映射一个加锁值;如果被加锁处理过,则当前所述订单存在重复。
16.根据本公开的第三方面,提供了一种计算机可读存储介质,存储有计算机指令,所述计算机指令用于使所述计算机执行第一方面任意一项实现方式所述的订单防重方法。
17.根据本公开的第四方面,提供了一种电子设备,包括:包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器执行第一方面任意一项实现方式所述的订单防重方法。
18.在本公开实施例订单防重方法及装置中,包括:在接收到订单提交请求后组装识别码,以唯一标识所述订单;基于缓存中设置的锁机制、以及识别码,对当前所述订单是否存在重复进行判断;如果不存在重复,则当订单提交请求指示的业务处理完毕后,将所述订单存入数据库中,其中,所述数据库中预先设置有索引机制;基于所述识别码,利用所述索引机制判断所述订单是否重复。通过缓存和数据库双重防重的方法,降低了订单防重的成本,提高了防重准确性。解决了相关技术中前后端改造成本高,防重准确性不高的问题。
附图说明
19.为了更清楚地说明本公开具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本公开的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
20.图1是根据本公开实施例的订单防重方法流程图;
21.图2是根据本公开实施例的订单防重方法一个应用示意图;
22.图3是根据本公开实施例的订单防重方法另一个应用示意图
23.图4是根据本公开实施例的电子设备的示意图。
具体实施方式
24.为了使本技术领域的人员更好地理解本公开方案,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分的实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本公开保护的范围。
25.需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清
楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
26.相关技术中,在订单防重复递交的方法中,通常通过如下方式实现:
27.1、为每次请求生成请求唯一键,后端生成提供给前端,缓存存储数据;
28.2、通过前端接收客户端发送信息的提交请求,赋予前端一个唯一标识码,前端向后端提交请求,带上唯一键;
29.3、服务端解析数据,对每个唯一键进行缓存删除,删除成功表示第一次请求,继续处理,未删除成功表示重复提交。(只允许一次请求)
30.上述方式通常后端要给出单独生成token令牌接口,前端要在每次调用时候先获取token令牌等,前后端都需要进行改造,工作投入成本较高。
31.需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
32.根据本公开实施例,提供了一种订单防重方法,如图1所示,该方法包括如下的步骤101至步骤104:
33.步骤101:在接收到订单提交请求后组装识别码,以唯一标识所述订单。
34.在本实施例中,服务端可以接收订单提交请求,并且对该订单的业务数据进行标识,得到订单对应的识别码,为了保证订单标识的唯一性,可以结合订单中的业务数据进行设计,比如:订单的平台号+订单号得到识别码,这仅仅是示例性地,满足业务字段全局唯一性即可,具体算法不做限定。
35.步骤102:基于缓存中设置的锁机制、以及识别码,对当前所述订单是否存在重复进行判断。
36.在本实施例中,缓存可以采用缓存采用分布式缓存,redis,memcached等实现。以redis缓存为例,通过用redis技术,利用锁机制的时效性,解决短时间内多次点击而导致各种重复数据提交的问题,同时由于引入了锁机制,在任何时间段出现表单重复提交的问题,都可以进行订单是否存在重复的判断;而在上述判断过程中是基于识别码实现的判断。进一步地,如果不存在重复则存入缓存,如果存在重复,则返回重复提交的报错信息。
37.步骤103:如果不存在重复,则当订单提交请求指示的业务处理完毕后,将所述订单存入数据库中,其中,所述数据库中预先设置有索引机制。
38.在本实施例中,如果在缓存中判断不存在重复,那么可以存入缓存,并将订单数据存储至数据库中。由于在缓存判断订单是否重复的环节中,也可能存在未识别出的重复订单,因此在数据库环节进行第二次判断。
39.步骤104:基于所述识别码,利用所述索引机制判断所述订单是否重复。
40.在本实施例中,可以基于识别码进行索引,判断数据库中是否存在重复的订单,如果不存在则存储订单数据以进行后续业务处理。
41.参考图2,图2示出了本实施例方法的流程示意图,接收订单提交请求信息;从缓存读取此订单信息唯一标识码;判断此订单是否重复提交请求;如果此订单是重复提交,则拒绝提交请求;如果此订单未被重复提交,则处理此订单;将此订单提交请求信息写入存储;如果存储触发唯一约束,则拒绝提交请求;如果存储正常,则正常处理,业务结束。
42.方法由服务端实现,根据业务进件订单号全局唯一特点,通过组装唯一识别码,缓存存储数据,数据库存储数据等步骤实现订单数据重复提交的问题,通过分布式缓存,数据
库等多重保护,达到防止重复提交的目的。
43.作为本实施例一种可选的实现方式,基于缓存中设置的锁机制、以及识别码,对当前所述订单是否存在重复进行判断包括:基于提交的订单所对应的识别码,判断该订单当前是否已经被加锁处理过;如果未被加锁处理过,则对提交的订单进行加锁处理,并赋予加锁值,其中,每个订单对应的标识码可映射一个加锁值;如果被加锁处理过,则当前所述订单存在重复。
44.在本可选的实现方式中,当面临提交的订单可以先判断该订单是否处于加锁状态,如果未处于加锁状态可以对当前订单进行加锁,加锁值可以基于订单的唯一识别码进行确定。
45.以redis为例,可以将所述订单提交请求信息使用set【set(key,value,"nx","px",exptime)】写入redis,若上述写入操作成功,正常执行,若上述写入操作失败,此订单判定重复订单。在通过缓存中的锁机制判断订单重复的过程可以包括:对订单进行加锁并设置值,如果未加锁成功,则说明该订单属于重复订单。当加锁成功后,针对不同的订单进行业务处理,当处理完毕后可以释放锁。
46.作为本实施例一种可选的实现方式,在将所述订单存入数据库中之前,所述方法还包括:当订单的业务处理完毕后,对经加锁处理后的订单锁进行释放。
47.在本可选的实现方式中,当当前订单的业务处理完毕后,在进行解锁前,可以基于当前处理完毕的订单的加锁值确定该订单是否是当前处理完毕订单,以防解锁错误。
48.作为本实施例一种可选的实现方式,在锁机制中还对加锁时长进行设置,当订单的加锁时长达到目标值后,对加锁处理后的订单锁进行释放。
49.在本可选的实现方式中,还可以设置定时任务,当加锁时长达到设定的目标时长时,可以释放锁。在目标时长内,当有重复订单提交时,直接反馈重复提交的报错信息。例如,为每次请求预设防重的时间,该时间范围内的重复请求都认为重复提交被拦截,比如:防重时间设定2秒,表示2秒内的重复请求都会被拦截,具体可以结合业务实际需要进行配置设定,在上述防重时间内,只允许一次请求。
50.参考图3,缓存中的锁机制可以包括如下步骤:机制程序加锁并设置值;若加锁成功,此订单新订单,同时设置值;正常开展业务处理;若是此订单锁;释放锁;若不是此订单锁;结束。若加锁失败,此订单判断重复订单;结束。定时任务启动后;若锁过期释放锁;若锁不过期则结束。
51.作为本实施例一种可选的实现方式,基于所述识别码,利用所述唯一索引机制判断所述订单是否重复。
52.在本可选的实现方式中,如果订单提交的间隔时长大于前述的目标时长,则仍可能存在重复订单,例如,目标时长是2秒,当2秒到时后释放锁,而第二次提交的间隔时长是3秒,该第二次提交的订单将无法被识别出重复。因此在数据库中入库前可以基于订单识别码,在数据库中进行重复订单的搜索。利用数据库唯一索引机制进行防重处理(确保业务正常运行),当第一次写入数据可以正常写入,第二次写入数据会因为唯一索引发生报错。
53.本实施例通过缓存和数据库的双重判断,达到了订单防重的目的。解决了短时间内多次重复提交以及因异常情况(非短时间内)的多次重复提交导致订单重复的问题。通过本实施例的方法易改造,能够简化已有程序的改造难度,只需要服务端进行改造,前端无需
改造;低成本,只涉及服务端改造,简化前端开发,前后端联调工作。
54.需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
55.根据本公开实施例,还提供了一种用于实施上述订单防重方法的装置,该装置包括:识别码确定单元,被配置成在接收到订单提交请求后组装识别码,以唯一标识所述订单;第一防重单元,基于缓存中设置的锁机制、以及识别码,对当前所述订单是否存在重复进行判断;第二防重单元,如果不存在重复,则当订单提交请求指示的业务处理完毕后,将所述订单存入数据库中,其中,所述数据库中预先设置有索引机制;基于所述识别码,利用所述索引机制判断所述订单是否重复。
56.作为本实施例一种可选的实现方式,基于缓存中设置的锁机制、以及识别码,对当前所述订单是否存在重复进行判断包括:基于提交的订单所对应的识别码,判断该订单当前是否已经被加锁处理过;如果未被加锁处理过,则对提交的订单进行加锁处理,并赋予加锁值,其中,每个订单对应的标识码可映射一个加锁值;如果被加锁处理过,则当前所述订单存在重复。
57.作为本实施例一种可选的实现方式,在将所述订单存入数据库中之前,所述方法还包括:当订单的业务处理完毕后,对经加锁处理后的订单锁进行释放。
58.作为本实施例一种可选的实现方式,在锁机制中还对加锁时长进行设置,当订单的加锁时长达到目标值后,对加锁处理后的订单锁进行释放。
59.作为本实施例一种可选的实现方式,基于所述识别码,利用所述唯一索引机制判断所述订单是否重复。
60.作为本实施例一种可选的实现方式,,基于所述识别码,利用所述唯一索引机制判断所述订单是否重复包括:将所述识别码所做索引,在数据库中查找是否存在与该索引相同的字段;如果不存在,则存入所述订单以继续实现订单相关的业务处理;如果存在,则判断订单为重复订单。
61.本公开实施例提供了一种电子设备,如图4所示,该电子设备包括一个或多个处理器41以及存储器42,图4中以一个处理器41为例。
62.该控制器还可以包括:输入装置43和输出装置44。
63.处理器41、存储器42、输入装置43和输出装置44可以通过总线或者其他方式连接,图4中以通过总线连接为例。
64.处理器41可以为中央处理器(centralprocessingunit,cpu)。处理器41还可以为其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
65.存储器42作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本公开实施例中的控制方法对应的程序指令/模块。处理器41通过运行存储在存储器42中的非暂态软件程序、指令以及模块,从而执行服务器的
各种功能应用以及数据处理,即实现上述方法实施例的方法。
66.存储器42可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据服务器操作的处理装置的使用所创建的数据等。此外,存储器42可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器42可选包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至网络连接装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
67.输入装置43可接收输入的数字或字符信息,以及产生与服务器的处理装置的用户设置以及功能控制有关的键信号输入。输出装置44可包括显示屏等显示设备。
68.一个或者多个模块存储在存储器42中,当被一个或者多个处理器41执行时,执行如图1所示的方法。
69.本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各电机控制方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)、随机存储记忆体(randomaccessmemory,ram)、快闪存储器(flashmemory)、硬盘(harddiskdrive,缩写:hdd)或固态硬盘(solid-statedrive,ssd)等;存储介质还可以包括上述种类的存储器的组合。
70.虽然结合附图描述了本公开的实施方式,但是本领域技术人员可以在不脱离本公开的精神和范围的情况下作出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1