本发明涉及互联网技术领域,尤其涉及一种预防重复操作的方法及系统。
背景技术:
随着网络的发展,计算机已成为人们生活不可或缺的一部分,在访问网站时,经常需要提交一些表单来进行信息录入,而对于性能不佳或程序运行缓慢的计算机而言,页面更新慢,使用者为确保表单递交状态,会多次点击“确定”的提示按钮,从而导致表单重复提交,而使信息更新出现错误。表单重复提交成为各大网站越来越棘手的问题,不仅攻击各大网站数据的安全性,而且还考验用户的忍耐性。
类似的问题还比如:
1、用户通过app进行订单活动时,点击确认订单以后,由于网络或者其他原因,app存在未响应的问题,此时用户会多次重复点击确认订单,从而导致出现重复下单的问题;
2、用户通过app进行沟通交流时,接收或者发送消息有时会出现消息重复推送的问题,由此产生的影响可能会非常大。
针对这一问题,现有技术中也提出一些改进措施。
如申请号为cn200910014312.7的专利文献公开的“一种防止页面重复提交的方法”,该发明基于struts防重复提交技术,提供一种防止页面重复提交的方法,该方法是通过修改struts的token令牌机制,采用一个页面多个token对象,每个token对象对应多个url请求,所有token对象构成一个循环队列,进而防止一个页面的多个并发重复提交,本发明使用token队列,一个form里面设置token,token采用先进先出的原则。这样就可以实现多个form时候防止重复提交页面。这种方式是服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而防止重复提交的发生。但这种方式客户端与服务器端需要多次交互,由于要对token的令牌机制进行修改,添加了很多相应程序,对本身运行速度就不高的于计算机而言可能会出现响应迟缓甚至死机的状况。此外,这种锁屏功能也会受到操作系统模式、语言、框架等方面的影响而无法使用。
又如申请号为cn201310039142.4的专利文献公开的“一种防止用户重复提交的方法和系统”,该发明提供一种防止用户重复提交的方法和系统,该系统包括一锁屏模块、一表单提交客户端和一服务器端,在用户点击提交按钮触发表单,进行提交的时候,触发锁屏模块工作,对屏幕进行锁屏,不能再次提交,阻止用户执行多次点击命令;在完成信息上传后解除锁屏,从而有效防止重复提交。该发明还支持框架级别的锁屏,通过自动查找当前页面中被锁屏的子框架对应的父框架,实现跨框架锁屏。这种方法在用户提交请求后会对屏幕进行锁屏,只有当请求完成后才能进行解锁,在遇到网络通信效果不是特别理想时,会导致解锁时间较长,从而降低用户体验感。
技术实现要素:
针对上述现有技术的现状,本发明旨在提出一种预防重复操作的方法及系统,能够确保在分布式环境中操作的唯一性。
本发明解决上述技术问题所采用的技术方案为:
一种预防重复操作的方法,包括步骤:
s1.接收多个业务操作对应的多个唯一标识;
s2.根据所述多个唯一标识生成对应的多个全局id;
s3.若存在相同的全局id,则判断所述对应的业务操作为重复操作;
若不存在相同的全局id,则判断所述对应的业务操作为非重复操作。
进一步地,步骤s1中,所述唯一标识包括:app_key、业务操作内容信息。
进一步地,步骤s2具体包括:
s21.根据所述接收的多个唯一标识,通过md5算法生成多个全局id,设置全局id作为关键字;
s22.设置关键值,所述关键值包括时间戳、唯一标识;
s23.将所述关键字及关键值存储至外部存储引擎中。
进一步地,步骤s3中,通过关键字查找,于所述外部存储引擎中查找是否存在相同的全局id,判断所述业务操作是否为重复操作。
进一步地,步骤s3具体为:
s31.若存在相同的全局id,则判断所述业务操作为重复操作,向业务方返回失败信息;
s32.若不存在相同的全局id,则判断所述业务操作为非重复操作,向业务方返回成功信息。
进一步地,若返回成功信息,还包括:
s4.设置失效时间,所述关键字及关键值根据所述时间戳及失效时间进行自删除。
进一步地,还包括返回结果信息的检验操作,具体为:
s51.返回成功信息后,业务方进行业务操作,所述业务操作完成后,业务方将操作结果、返回结果信息发送至系统;
s52.查找所述业务操作对应的关键字、关键值,并与所述操作结果、返回结果信息进行比对;
s53.若关键字一致,则延长该关键字及关键值对应的失效时间。
一种预防重复操作的系统,包括:
接收模块,用于接收多个业务操作对应的多个唯一标识;
生成模块,用于根据所述多个唯一标识生成对应的多个全局id;
判断模块,用于根据所述全局id判断对应的业务操作是否为重复操作:若存在相同的全局id,则判断所述对应的业务操作为重复操作;若不存在相同的全局id,则判断所述对应的业务操作为非重复操作。
进一步地,还包括:
外部存储引擎,用于存储关键字、关键值。
进一步地,还包括:
设置模块,用于设置失效时间;
所述设置模块还包括:
检验单元,用于完成返回结果信息的检验操作;
时间延长单元,用于延长所述关键字及关键值对应的失效时间。
本发明提出了一种预防重复操作的方法及系统,通过对每一个不同的业务操作赋予其唯一性,通过检验操作是否为重复操作以实现预防重复操作带来的不良影响或者更为严重的问题。
附图说明
图1为本发明实施例一中预防重复操作的方法流程图;
图2为本发明实施例二中预防重复操作的系统结构图;
图3为本发明实施例四中预防重复操作的系统结构图;
图4为本发明实施例四中设置模块结构图。
具体实施方式
以下是本发明的具体实施例并结合附图,对本发明的技术方案作进一步的描述,但本发明并不限于这些实施例。
本发明旨在提出一种预防重复操作的方法及系统,能够确保在分布式环境中操作的唯一性。
本发明基本原理如下:预防重复操作系统的实现思路是将每一个不同的业务操作赋予其唯一性,这个唯一性是通过对不同操作所对应的唯一的app_key、业务操作内容信息,生成一个唯一的全局id来实现。本发明中,相同的操作生成相同的全局id,不同的操作生成不同的全局id。
以下为本发明具体实施例。
实施例一
图1为本实施例中一种预防重复操作的方法流程图,本实施例中,一种预防重复操作的方法包括步骤:
s1.接收多个业务操作对应的多个唯一标识;
业务方进行业务操作之前,根据所述业务操作生成对应的唯一标识trans_contents,所述唯一标识trans_contents包括app_key、业务操作内容信息。
app_key是第三方应用密匙,用于加解密。
本实施例中,app_key相当于应用的标识,是唯一的。
业务操作内容信息包括当前操作的业务对象,以及使用者信息等等。
唯一标识trans_contents生成后,业务方将所述唯一标识trans_contents发送至预防重复操作系统。
s2.根据所述多个唯一标识生成对应的多个全局id;
本步骤中,系统接收业务方发送的唯一标识,并根据所述唯一标识生成对应的全局id,并将生成的多个全局id保存在外部存储引擎中。
s3.若存在相同的全局id,则判断所述对应的业务操作为重复操作;
若不存在相同的全局id,则判断所述对应的业务操作为非重复操作。
本步骤中,通过于所述外部存储引擎中查找是否存在相同的全局id,判断所述业务操作是否为重复操作,具体为:
若存在相同的全局id,则判断所述业务操作为重复操作,向业务方返回失败信息;
若不存在相同的全局id,则判断所述业务操作为非重复操作,向业务方返回成功信息。
本实施例提出了一种预防重复操作的方法及系统,通过对每一个不同的业务操作赋予其唯一性,通过检验操作是否为重复操作以实现预防重复操作带来的不良影响或者更为严重的问题。
实施例二
图2为本实施例中一种预防重复操作的系统结构图,本实施例中,一种预防重复操作的系统包括:
接收模块100,用于接收多个业务操作对应的多个唯一标识;
生成模块200,用于根据所述多个唯一标识生成对应的多个全局id;
判断模块300,用于根据所述全局id判断对应的业务操作是否为重复操作:若存在相同的全局id,则判断所述对应的业务操作为重复操作;若不存在相同的全局id,则判断所述对应的业务操作为非重复操作。
本系统工作时,首先由接收模块100接收业务方发送的唯一标识trans_contents;
随后,生成模块200对唯一标识trans_contents进行内容解析,并生成唯一对应的全局id,并将全局id保存至外部存储引擎;
再由判断模块300判断所述业务操作是否为重复操作;
若存在相同的全局id,则判断所述业务操作为重复操作,向业务方返回失败信息;
若不存在相同的全局id,则判断所述业务操作为非重复操作,向业务方返回成功信息。
本实施例中,还包括:
外部存储引擎400,用于存储根据多个唯一标识生成的多个全局id。
实施例三
本实施例与实施例一不同之处在于,本实施例中,步骤s2具体包括:
s21.根据所述接收的多个唯一标识,通过md5算法生成多个全局id,设置全局id作为关键字;
md5,即messagedigestalgorithmmd5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为rfc1321(r.rivest,mitlaboratoryforcomputerscienceandrsadatasecurityinc.april1992)。
md5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了md5以外,其中比较有名的还有sha-1、ripemd以及haval等。
md5算法具有压缩性、容易计算、抗修改性、强抗碰撞等特点。
对于高并发分布式系统数据来说,在分片时,典型的是分库分表,就有一个全局id生成的问题。
全局id生成主要由以下几种方式:
1.uuid
uuid生成的是length=32的16进制格式的字符串,算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成uuid。
2.基于redis的分布式id生成器
利用redis的lua脚本执行功能,在每个节点上通过lua脚本生成唯一id。
3.mongodb文档(document)全局唯一id
为了考虑分布式,“_id”要求不同的机器都能用全局唯一的同种方法方便的生成它,因此选用了生成objectid对象的方法。objectid使用12字节的存储空间,其生成方式如下:前9个字节保证了同一秒钟不同机器不同进程产生的objectid的唯一性。后三个字节是一个自动增加的计数器(一个mongod进程需要一个全局的计数器),保证同一秒的objectid是唯一的。
全局id生成后,设置所述全局id为关键字key。
s22.设置关键值,所述关键值包括时间戳、唯一标识;
本步骤中,设置关键值value为:时间戳+唯一标识trans_contents。
其中,时间戳用于标记当前的操作线程。
s23.将所述关键字及关键值存储至外部存储引擎中。
本实施例中,步骤s3中,通过关键字查找,于所述外部存储引擎中查找是否存在相同的全局id,判断所述业务操作是否为重复操作。
若返回成功信息,还包括:
s4.设置失效时间,所述关键字及关键值根据所述时间戳及失效时间进行自删除。
此外,还包括返回结果信息的检验操作,具体为:
s51.返回成功信息后,业务方进行业务操作,所述业务操作完成后,业务方将操作结果、返回结果信息发送至系统;
s52.查找所述业务操作对应的关键字、关键值,并与所述操作结果、返回结果信息进行比对;
s53.若关键字一致,则延长该关键字及关键值对应的失效时间。
本实施例中,当系统通过关键字查找,判断某业务操作为非重复操作,并向业务方返回成功信息。
业务方接收该成功信息后,开始执行该业务操作。
此外,系统还会设置一个该业务操作对应的失效时间,步骤s22中设置关键值时,关键值具体包括时间戳、唯一标识;
设置失效时间后,根据所述时间戳,可以确定关键值以及相关关键字在什么时候失效,此时方便所述关键值及关键字进行自删除。
所述失效时间可以由用户自行配置定义。
本实施例中,还包括返回结果信息的检验操作,业务方将操作结果和请求返回结果发送至系统,系统进行一次请求返回结果的检验,即:
若该次操作成功,系统根据key取出value值,与传入的返回结果进行比对,如果两者相等,则将该全局id的失效时间改为较长时间。
本实施例提出了一种预防重复操作的方法,通过对每一个不同的业务操作赋予其唯一性,并设置对应的关键字、关键值;通过查找关键字及关键值,检验操作是否为重复操作,以实现预防重复操作带来的不良影响或者更为严重的问题。
实施例四
图3为本实施例中一种预防重复操作的系统结构图,本实施例中,该系统还包括:
设置模块500,用于设置失效时间;
如图4所示,所述设置模块500还包括:
检验单元510,用于完成返回结果信息的检验操作;
时间延长单元520,用于延长所述关键字及关键值对应的失效时间。
本系统工作时,首先由接收模块100接收业务方发送的唯一标识trans_contents;随后,生成模块200对唯一标识trans_contents进行内容解析,并生成唯一对应的全局id,并设置对应的关键字key、关键值value;
再由判断模块300根据所述关键字key判断所述业务操作是否为重复操作;
若存在相同的全局id,则判断所述业务操作为重复操作,向业务方返回失败信息;
若不存在相同的全局id,则判断所述业务操作为非重复操作,向业务方返回成功信息。
本实施例中,设置模块500设置失效时间后,根据所述时间戳,可以确定关键值以及相关关键字在什么时候失效,此时方便所述关键值及关键字进行自删除。
此外,还包括返回结果信息的检验操作,系统向业务方返回成功信息后,业务方进行业务操作,所述业务操作完成后,业务方将操作结果、返回结果信息发送至系统;系统内检验单元510查找所述业务操作对应的关键字、关键值,并与所述操作结果、返回结果信息进行比对,若关键字一致,则时间延长单元520延长该关键字及关键值对应的失效时间。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。