一种处理红包的方法及系统与流程

文档序号:11155385阅读:779来源:国知局
一种处理红包的方法及系统与制造工艺

本申请涉及通信技术领域,尤其涉及一种处理红包的方法及系统。



背景技术:

随着科学技术的不断发展,通信技术也得到了飞速的发展,电子产品的种类也越来越多,人们也享受到了科技发展带来的各种便利。

互联网应用中处处可见类似抢红包的应用,尤其是在弹幕式视频直播行业,各种由赠送高价值礼物而触发的虚拟货币的红包应用已经非常普遍。

而在抢红包应用场景中,由于用户的抢红包行为存在一定的不可预测性,在面对高并发的抢红包请求场景下会形成抢红包的高峰期,在抢红包高峰期时,抢红包请求难以快速响应。



技术实现要素:

本发明了提供了一种处理红包的方法及系统,以解决抢红包请求难以快速响应的技术问题。

为解决上述技术问题,本发明提供了一种处理红包的方法及系统,所述方法应用于处理红包的系统,所述系统包括客户端、红包服务器、数据库组,所述数据库组中包含有主数据库和从数据库集合,所述从数据库集合中包含有用于查询红包对应的货币价值的多个查询数据库;所述方法包括:

所述红包服务器接收所述客户端发送的抢红包请求,判断所述抢红包请求中是否携带所述红包对应的身份标识ID;

若所述抢红包请求中携带有所述红包对应的身份标识ID,所述红包服务器随机从所述多个查询数据库中的确定出第一查询数据库,并利用所述第一查询数据库基于所述红包对应的身份标识ID查找是否有所述红包对应的货币价值;

若有所述红包对应的货币价值,所述红包服务器从所述主数据库中获取所述红包对应的货币价值返回给所述客户端。

优选的,所述判断所述抢红包请求中是否携带所述红包对应的身份标识ID之后,所述方法还包括:

若所述抢红包请求中没有携带所述红包对应的身份标识ID,生成货币价值为0的红包返回给所述客户端。

优选的,所述利用所述第一查询数据库基于所述红包对应的身份标识ID查找是否有所述红包对应的货币价值之后,所述方法还包括:

若没有所述红包对应的货币价值,生成货币价值为0的红包返回给所述客户端。

优选的,所述客户端发送抢红包请求之前,所述方法还包括:

所述客户端发送用于创建红包的请求数据包;

所述红包服务器接收到所述请求数据包;

所述红包服务器判断所述请求数据包中是否包含有货币总价值Vt和红包分配份数Cn,其中Cn为正整数且Cn≥1;

若所述请求数据包中包含有所述货币总价值Vt和所述红包分配份数Cn,所述红包服务器将所述货币总值Vt随机分配成Cn份红包,每份红包对应有各自的货币价值;

所述红包服务器为所述Cn份红包创建各自的身份标识ID。

优选的,从数据库集合中还包括有一个用于永久存储所述Cn份红包和各自的货币价值的存储数据库。

优选的,所述红包服务器为所述Cn份红包创建各自的身份标识ID之后,所述方法还包括:

所述红包服务器在多个数据库组中确定出包含有所述主数据库和所述从数据库集合的数据库组,其中,在多个数据库组中,每个数据库组包含有主数据库和从数据库集合;

所述红包服务器利用所述主数据库存储所述Cn份红包、所述Cn份红包各自身份标识ID、所述Cn份红包各自的货币价值。

优选的,所述红包服务器利用所述主数据库存储所述Cn份红包、所述Cn份红包各自身份标识ID、所述Cn份红包各自的货币价值之后,所述方法还包括:

所述红包服务器将所述Cn份红包、所述Cn份红包各自身份标识ID、所述Cn份红包各自的货币价值同步存储到所述从数据库集合中。

优选的,所述红包服务器将所述货币总值Vt随机分配成Cn份红包,包括:

以Cn份红包为标准对所述货币总值Vt进行分配;或者

以货币价值为标准对所述货币总值Vt进行分配,红包的份数Cn随机。

本发明的另一个方面,公开了一种处理红包的系统,所述系统包括:客户端、红包服务器、数据库组,所述数据库组中包含主数据库和从数据库集合,所述从数据库集合中包含有用于查询红包对应的货币价值的多个查询数据库;

所述客户端,用于发送抢红包请求;

所述红包服务器,用于接收到由所述客户端发送的抢红包请求,然后判断所述抢红包请求中是否携带所述红包对应的身份标识ID;

所述红包服务器,用于若所述抢红包请求中携带有所述红包对应的身份标识ID,随机从所述多个查询数据库中的确定出第一查询数据库,并利用所述第一查询数据库基于所述红包对应的身份标识ID查找是否有所述红包对应的货币价值;

所述红包服务器,用于若有所述红包对应的货币价值,从所述主数据库中获取所述红包对应的货币价值返回给所述客户端。

优选的,所述客户端,用于发送用于创建红包的请求数据包;

所述红包服务器,用于接收到所述请求数据包;判断所述请求数据包中是否包含有货币总价值Vt和红包分配份数Cn,其中Cn为正整数且Cn≥1;若所述请求数据包中包含有所述货币总价值Vt和所述红包分配份数Cn,将所述货币总值Vt随机分配成Cn份红包,每份红包对应有各自的货币价值;为所述Cn份红包创建各自的身份标识ID。

通过本发明的一个或者多个技术方案,本发明具有以下有益效果或者优点:

本发明公开了一种处理红包的方法及系统,当所述客户端发送抢红包请求之后,所述红包服务器判断所述抢红包请求中是否携带所述红包对应的身份标识ID;若是则随机从所述多个查询数据库中的确定出第一查询数据库,并利用所述第一查询数据库基于所述红包对应的身份标识ID查找是否有所述红包对应的货币价值;若有所述红包对应的货币价值,所述红包服务器从所述主数据库中获取所述红包对应的货币价值返回给所述客户端。本发明将数据库组分为主数据库和从数据库集合,采用通过从数据库集合中的查询数据库来查红包中是否有剩余红包,再确定是否要去主数据库中完成相应操作,降低了主数据库的压力,直接提升了抢红包的响应效率。

附图说明

图1为本发明实施例中的整体框架图;

图2为本发明实施例中Redis Group的组成图;

图3为本发明实施例中本发明的创建红包的流程图;

图4为本发明实施例中发红包的流程图。

具体实施方式

为了使本申请所属技术领域中的技术人员更清楚地理解本申请,下面结合附图,通过具体实施例对本申请技术方案作详细描述。

图1为本发明的整体框架图:

1)Client:客户端,发送抢宝箱请求。举例来说,本发明具有客户端1、客户端2、客户端3……客户端n。每个客户端都可以发送抢宝箱请求。

2)GateServer Cluster:网关服务集群,负责client的网络接入,隔离、保护公网和内网的数据交换。

3)RedpacketServer Cluster:红包服务器的集群,负责处理创建红包、抢红包的网络请求。

4)Redis Group:数据库组,负责红包数据持久化和抢红包的结果处理,根据红包身份标识ID进行分片,每个红包都有一个唯一的身份标识ID。举例来说,本发明具有m个数据库组,分别为:数据库组1、数据库组2、数据库组3……数据库组m。

图2为Redis Group的组成图:

在图2中,一个Redis Group(数据库组)由一个Master Redis主数据库和一个从数据库集合组成,所述从数据库集合中包含有用于存储红包数据的一个存储数据库和用于查询红包对应的货币价值的多个查询数据库。

具体来说,在从数据库集合中包含有若干(大于等于2)个Slave Redis从数据库。其中,这若干个从数据库中,可随机确定一个从数据库作为存储数据库,其余的从数据库作为查询数据库。例如图2中,x个从数据库中的第一从数据库作为存储数据库,而其余的第2从数据库至第x个从数据库作为查询数据库。

5)Master Redis:主数据库,负责创建红包、抢红包数据的写入操作。主数据库和从数据库集合存在同步机制,Mater Redis的数据发生变化,会自动同步到所有的Slave Redis从数据库。

6)Slave Redis 1:从数据库中的第一从数据库,也作为存储数据库,只负责红包数据的持久化。持久化的含义即是:第一从数据库会永久存储创建的所有红包、所有红包各自的身份标识ID、所有红包各自的货币价值等等。这些数据不会随着服务器的重启、故障等等原因而丢失。

7)Slave Redis 2至Slave Redis x:从数据库中的第2从数据库至第x个从数据库,作为查询数据库。这些从数据库只负责处理红包数据的查询操作,Redis在当下比较主流的服务器上的QPS(Query Per Second,每秒查询率)可高达5~8W。

综上,本发明公开的一种处理红包的系统,包括:客户端集群、红包服务器集群、网关服务集群、多个数据库组。

客户端和红包服务器的信息交互时通过网关服务集群进行转发的。

每个数据库组中包含一个主数据库和一个从数据库集合,所述从数据库集合中包含有用于查询红包对应的货币价值的多个查询数据库。

下面先介绍创建红包的具体实施过程,当然,本发明是以一个客户端为例进行介绍,其他客户端创建红包的过程类似,故而不再赘述。

所述客户端,用于发送用于创建红包的请求数据包;

所述红包服务器,用于接收到所述请求数据包;判断所述请求数据包中是否包含有货币总价值Vt和红包分配份数Cn,其中Cn为正整数且Cn≥1;若所述请求数据包中包含有所述货币总价值Vt和所述红包分配份数Cn,将所述货币总值Vt随机分配成Cn份红包,每份红包对应有各自的货币价值;为所述Cn份红包创建各自的身份标识ID。

另外,所述红包服务器,还用于为所述Cn份红包创建各自的身份标识ID之后,在多个数据库组中确定出包含有所述主数据库和所述从数据库集合的数据库组,其中,在多个数据库组中,每个数据库组包含有一主数据库和一从数据库集合;利用所述主数据库存储所述Cn份红包、所述Cn份红包各自身份标识ID、所述Cn份红包各自的货币价值。

作为一种可选的实施例,红包服务器,还用于将所述Cn份红包、所述Cn份红包各自身份标识ID、所述Cn份红包各自的货币价值同步存储到所述从数据库集合中。

下面介绍发红包的实施原理。

所述客户端,用于发送抢红包请求;

所述红包服务器,用于接收到由所述客户端发送的抢红包请求,然后判断所述抢红包请求中是否携带所述红包对应的身份标识ID;若所述抢红包请求中携带有所述红包对应的身份标识ID,随机从所述多个查询数据库中的确定出第一查询数据库,并利用所述第一查询数据库基于所述红包对应的身份标识ID查找是否有所述红包对应的货币价值;若有所述红包对应的货币价值,从所述主数据库中获取所述红包对应的货币价值返回给所述客户端。

基于上述架构,图3为本发明的创建红包的流程图:

步骤31,客户端发送用于创建红包的请求数据包。

具体来说,在客户端上,安装有对应的应用程序Application。该应用程序可以执行创建红包操作,也可以执行抢红包操作。

在创建红包时,客户端上的应用程序发送创建红包的请求数据包CreateData给红包服务器Redpacket Server。该请求数据包CreateData中至少包含有红包的货币总价值Vt、红包分配份数Cn。

红包服务器Redpacket Server,是Redpacket Server Cluster的组成单元,每个红包服务器Redpacket Server拥有唯一的16位服务ID,本发明将其简称为RSID。

请求数据包CreateData发送到哪一个红包服务器Redpacket Server由随机函数Random(time(NULL))得出的结果Rm对红包服务器Redpacket Server总数量Rn取模确定的。例如:Rm%Rn为0,则请求数据包CreateData的落点就是第1个红包服务器Redpacket Server上,依次类推。

步骤32,所述红包服务器接收到所述请求数据包。

步骤33,所述红包服务器判断所述请求数据包中是否包含有货币总价值Vt和红包分配份数Cn。

其中,Cn为正整数且Cn≥1。

具体来说,红包服务器Redpacket Server检查请求数据包CreateData中是否携带必要参数。如请求数据包CreateData中是否携带了货币总价值Vt,红包分配份数Cn,若都不存在,或者只有一个参数存在,则直接返回创建红包失败。

若货币总价值Vt,红包分配份数Cn都存在,则进入步骤34。

步骤34,若所述请求数据包中包含有所述货币总价值Vt和所述红包分配份数Cn,所述红包服务器将所述货币总值Vt随机分配成Cn份红包,每份红包对应有各自的货币价值。

具体来说,红包服务器Redpacket Server将货币总值Vt随机分配(分配规则可根据不同的业务需求自定义)成Cn份红包,每个红包包含货币价值Vn。

在分配的实施过程中,有两种分配方式:

第一种分配方式:以Cn份红包为标准,对所述货币总值Vt进行分配,每份红包中的货币价值随机。举例来说,Cn=5,货币总值=100块,那么将这100块分成5个红包,每个红包的货币价值可以随机,例如50块、20块、10块、10块、10块。当然也可以平均分配,每个红包20块。

第二种分配方式,以货币价值为标准对所述货币总值Vt进行分配,红包的份数Cn随机。举例来说,货币总值=100块,每个红包的货币价值为1块或者2块,那么按照货币价值进行分配,就可以分配到50个红包-100个红包。

步骤35,所述红包服务器为所述Cn份红包创建各自的身份标识ID。

具体来说,每个红包有唯一的64位身份标识ID,简称为RPID。RPID的高32位为当前时间戳,中间的16位为RSID,低16位为0~65536循环的自增长ID。

红包服务器为所述Cn份红包创建各自的身份标识ID之后,红包服务器在多个数据库组中确定出包含有所述主数据库和所述从数据库集合的数据库组。其中,在多个数据库组中,每个数据库组包含有一主数据库和一从数据库集合。

故而,在步骤35之后会执行步骤36:所述红包服务器利用所述主数据库存储所述Cn份红包、所述Cn份红包各自身份标识ID、所述Cn份红包各自的货币价值。举例来说,选在一个Redis Group数据库时,对RPID进行BKDR hash得到结果Hn,Hn对Redis Group总量Gn取模确认落点在哪个Redis Group上。Hn%Gn为0,则红包数据就落地到第1个Redis Group上,依次类推。

在Redis Group内,Master Redis用List数据结构存储Cn份红包,Key值为RPID。

完成此流程后,Redis主、从同步机制会自动完成数据同步工作。即步骤37:所述红包服务器将所述Cn份红包、所述Cn份红包各自身份标识ID、所述Cn份红包各自的货币价值同步存储到所述从数据库集合中。

返回红包创建成功的结果。

图4为本发明一种处理红包的方法的流程图。

步骤41,所述客户端发送抢红包请求。

具体来说,客户端Client发送抢红包请求GrabData。用户A在客户端发出的红包,都携带有对应的身份标识ID。故而用户B在抢红包时,客户端会基于用户B的操作生成抢红包请求,该请求会携带该红包对应的身份标识ID,然后将抢红包请求发送给网关服务Gate Server。网关服务Gate Server是Gate Server Cluster的组成单元。

Gate Server将抢红包请求GrabData转发到内网的红包服务器Redpacket Server。

步骤42,所述红包服务器接收到由所述客户端发送的抢红包请求,然后判断所述抢红包请求中是否携带所述红包对应的身份标识ID。

若所述抢红包请求中没有携带所述红包对应的身份标识ID,生成货币价值为0的红包返回给所述客户端。

具体来说,Redpacket Server通过检查抢红包请求GrabData的数据是否有效(例如,是否包含合法的RPID),如果合法则进入下一流程,否则返回未抢到红包奖励的结果(伪造一条Vn为0的红包数据返回)。

步骤43,若所述抢红包请求中携带有所述红包对应的身份标识ID,所述红包服务器随机从所述多个查询数据库中的确定出第一查询数据库,并利用所述第一查询数据库基于所述红包对应的身份标识ID查找是否有所述红包对应的货币价值。

第一查询数据库是多个查询数据库中任意确定的一查询数据库,其作用是基于所述红包对应的身份标识ID查找是否有所述红包对应的货币价值。若没有所述红包对应的货币价值,生成货币价值为0的红包返回给所述客户端,表示未抢到红包奖励。

具体来说,在某一个Slave Redis中查询id为RPID的红包中是否任然存在红包,如果存在,则进入下一流程,否则返回未抢到红包的结果(伪造一条Vn为0的红包数据返回)。

步骤44,若有所述红包对应的货币价值,所述红包服务器从所述主数据库中获取所述红包对应的货币价值返回给所述客户端。

具体来说,在Master Redis中找到Key为RPID的List,并pop出一条红包数据,如果List为空或者不存在,则伪造一条Vn为0的红包数据返回。到此处就可返回成功抢红包的结果。

将红包中Vn大于0的数据和UID抛入MQ(MessageQueue消息队列)异步完成货币交易。

本方案的关键点在于Redis Group。

Redis Group根据RPID分片,可横线扩展Redis Group用于均衡不同的红包带来的请求压力。每个Redis Group中的Slave Redis也能横向扩展,用于均衡同一个红包带来的请求压力。具体每一个红包List落在哪一个Redis Group上,是根据RPID做BKDR hash确定的,如此保证了离散型。

Redis Group采用Slave Redis 1来持久化红包数据,可避免Master Redis和其他Slave Redis因持久化数据而降低QPS。

采用通过Slave Redis查红包中是否有剩余红包,再确定是否要去Master Redis中完成相应操作。虽然抢红包的client数量可能在百万级,但是红包真正能分配出去的份额远在这个数量级之下(千或者万级别)。通过从Slave Redis中查询红包剩余数量就能过滤掉90%以上Mater Redis非必要响应的GrabData。降低了Mater Redis的压力,就直接提升了抢宝箱的响应效率。

通过本发明的一个或者多个实施例,本发明具有以下有益效果或者优点:

本发明公开了一种处理红包的方法及系统,当所述客户端发送抢红包请求之后,所述红包服务器判断所述抢红包请求中是否携带所述红包对应的身份标识ID;若是则随机从所述多个查询数据库中的确定出第一查询数据库,并利用所述第一查询数据库基于所述红包对应的身份标识ID查找是否有所述红包对应的货币价值;若有所述红包对应的货币价值,所述红包服务器从所述主数据库中获取所述红包对应的货币价值返回给所述客户端。本发明将数据库组分为主数据库和从数据库集合,采用通过从数据库集合中的查询数据库来查红包中是否有剩余红包,再确定是否要去主数据库中完成相应操作,降低了主数据库的压力,直接提升了抢红包的响应效率。

尽管已描述了本申请的优选实施例,但本领域内的普通技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1