一种获取订单信息的方法及设备的制造方法_3

文档序号:9418023阅读:来源:国知局
br>[0075]为了使本发明所解决的技术问题、技术方案以及有益效果更加清楚明白,以下结合附图及实施例,对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0076]下面以Redis缓存区来进行订单信息的保存为例进行说明。Redis缓存区是一开源的使用ANSI C语言编写、支持网络可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的AP1、支持多种数据类型存放。为了保障Redis缓存区能提供安全高可用的数据,系统内部搭建了一套Redis集群环境。可用性更高、支持持久化、主备自动切换功能等。Redis缓存区提供一系列操作缓存数据的方法,例如,get O、set O、setNx O等方法。
[0077]需要说明的是,在本发明实施例中,缓存区为Redis缓存区,缓存区不局限于Redis缓存区,其他能够实现对处于工作态的数据库内的订单信息进行缓存的缓存区都适用于本发明实施例。
[0078]当业务处理单元接收到订单下单请求消息的时候,首先将订单下单请求消息中的订单号作为Key值保存在Redis缓存区,并将Key值对应的订单信息亦保存在Redis缓存区,使得通过查询Redis缓存区保存的Key值就能够获取到Key值对应的订单下单请求消息中的订单信息,从Redis缓存区获取订单下单请求消息中的Key值会有Redis缓存区不存在Key值和存在Key值两种情况。
[0079]例如,订单下单请求消息为{{“orderid= 2015745033970806,{“merid = 7450,orderdate = 20150515,pay = 463,state = “待支付”,valid per1d = 20150515,,}},可见所述订单下单请求消息包括订单号为2015745033970806,商户号为7450,订单日期为2015年05月15日,订单支付金额为463元,支付状态为“待支付”状态,订单保存在缓存区的有效日期为2015年05月15日。其中,业务处理单元将订单下单请求消息中的订单号设置为Redis缓存区中的Key值,S卩{ “orderid = 2015745033970806” },将商户号、订单日期、订单日期、订单支付金额、支付状态及订单存储有效日期等设置为与Key对应的订单信息。
[0080]本发明实施例中,若Redis缓存区不存在与订单下单请求消息中的订单标识对应的 Key 值{ “orderid = 2015745033970806”},则请求 Redis 缓存区加密锁,调用 Redis 缓存区的SetNxO方法将Key值及其对应的订单消息设置在Redis缓存区中,所述SetNxO方法中的加密锁的功能是为了防止设置Key值时订单信息并发插入,如果加密锁获取成功,就继续业务流程,将订单下单请求消息中的订单信息{ “merid = 7450,orderdate =20150515,pay = 463,state = “待支付”,valid per1d = 20150515”}}保存在处于工作态的数据库中。如果获得加密锁失败了,为了不影响业务流程则继续往下执行,亦将订单下单请求消息中的订单信息保存在处于工作态的数据库中。若处于工作态的数据库保存订单信息失败,则解除加密锁并通过Del O方法将Key值从Redis缓存区删除,以便用户再发起订单下单请求。若将订单下单请求中的订单消息保存在处于工作态的数据库成功或保存超时,不删除Redis缓存区的订单标识,完成用户下单流程。因为此时处于工作态的数据库可能处理保存订单信息缓慢或者所需保存的订单信息仍在保存等待队列中,为了提高处理订单流程速率,在保存订单消息超时的情况下,亦完成用户下单流程,以便用户发起订单支付请求消息。
[0081]在本发明的上述实施例中,若Redis缓存区存在Key值,则直接将缓存区Key值对应的订单信息与处于工作态的数据库内的所述订单下单请求消息中的订单信息进行更新,因为允许用户对同一笔订单进行重复下单的操作。例如,若重复下单时的订单下单请求消息为{{ “orderid = 2015745033970806,,},{ “merid = 7450,orderdate =20150515,pay = 433,state = “待支付”,valid per1d = 20150517” }},基于上述本发明实施例中已经保存在缓存区与处于工作态的数据库的订单下单请求消息{{“orderid =2015745033970806”},{ “merid = 7450, orderdate = 20150515,pay = 463,state =“待支付”,valid per1d = 20150515” }},所以,将订单下单请求消息中的订单消息中的订单金额更新为433,订单存储有效日期更新为2015年05月17日。
[0082]本发明实施例中,若将订单下单请求消息中的订单信息在Redis缓存区与处于工作作态的数据库更新失败后,则将Redis缓存区与处于工作态的数据库中的与订单下单请求消息中的订单信息删除,节省Redis缓存区与处于工作态的存储空间,结束订单流程;若将订单下单请求消息中的订单信息在Redis缓存区与处于工作作态的数据库更新成功,则进入订单支付环节。
[0083]需要说明的是,本发明实施例中对订单信息的更新可以根据实际订单信息的改变而更新,因此,可以为以下订单信息的一种或者任意组合:商户号;订单日期;订单金额;订单支付状态;订单存储有效日期。
[0084]本发明实施例提供了一种获取订单信息的方法流程图,如图2所示,为订单确认支付环节,包括以下步骤:
[0085]S201,接收订单支付请求消息,所述订单支付请求消息中包含订单标识;
[0086]S202,根据所述订单标识,从处于工作态的数据库中查询与所述订单标识对应的订单信息;
[0087]S203,若所述处于工作态的数据库内不存在与所述订单标识对应的订单信息,则根据所述订单标识从缓存区中查询在与所述订单标识对应的订单信息;
[0088]S204,根据查询到与所述订单标识对应的订单信息,反馈订单支付响应消息。
[0089]需要说明的是,本发明实施例中的订单支付请求消息中包含订单标识为订单号,所述订单标识并不局限于订单号,其他能够唯一标识订单支付请求消息中的订单消息的标识都适用于本发明实施例。
[0090]在订单确认支付环节,若原处于工作态的数据库出现异常,业务处理单元会确定另一数据库为处于工作态的数据库;由于切库操作,切库后的处于工作态的数据库中并未保存尚未支付的订单信息,造成订单信息的改变或者丢失,本发明实施例通过从缓存区中获取与订单下单请求消息中的订单标识对应的订单信息来,完成订单确认支付环节。
[0091]在上述实施例中,若处于工作态的数据库内不存在与所述订单标识对应的订单信息时,根据订单标识{ “orderid = 2015745033970806”}从Redis缓存区中查询所述订单标识对应的订单信息,得到{ “merid = 7450,orderdate = 20150515,pay = 463,state=“待支付”,valid per1d = 20150517” }},根据订单支付请求消息中的订单信息更新从Redis缓存区中得到的订单信息,订单状态更新为“支付中”,并根据查询到的Redis缓存区内的订单标识对应的订单信息向用户反馈订单支付响应消息。其中,订单支付响应可以以订单支付界面的形式反馈。在向用户反馈订单支付响应消息后,将订单信息写入处于工作态的数据库内。本实施例中还提供另外一种根据查询到与订单标识对应的订单信息,反馈订单支付响应消息:根据订单支付请求消息中的订单信息更新从Redis缓存区中得到的订单信息,将得到的订单消息写入处于工作态的数据库内,之后,将单状态更新为“支付中”并向用户反馈订单支付响应消息。
[0092]进一步,考虑到Redis缓存区是有限的,在订单状态更新为“支付完成”或者将订单信息写入处于工作态的数据库之后,删除Redis缓存区中与所述订单标识对应的订单信息,这样也就节省了 Redis缓存区的存储空间。
[0093]在上述实施例中,当
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1