向客户端推送用户数据的方法及系统与流程

文档序号:14504866阅读:169来源:国知局

本发明涉及计算机领域,尤其涉及一种向客户端推送用户数据的方法及系统。



背景技术:

目前,处理用户数据的过程中很多是基于多线程处理场景,在这些场景中往往需要实现对接收的用户数据按特定需求进行处理后推送给用户。例如当推送优惠券等用户数据时,不管是优惠券发送系统还是调用优惠券推送用户数据接口,都是通过消息队列(MQ)的方式推送优惠券的提示消息,客户端作为消费者接收优惠券提示消息。

目前处理优惠券的方法主要有以下几种:

用户的优惠券不经处理就全部推送到客户端。由于获取优惠券的场景众多(比如618大促、POP活动,领券中心发放等),存在在短时间内一个用户获取大量优惠券,这会导致用户在短时间内收到大量消息,给用户带来没必要的打扰,用户体验差。

采用多线程或者分布式技术进行推送。如果服务端采用多线程或者分布式的方式根据用户领取优惠券信息进行异步调度,然后分发给消息队列MQ,可以减轻MQ的数据压力,但是没办法对数据进行去重,MQ本身也无法实现对一个用户消息的合并处理。

缓存技术加线程池技术。客户端把MQ发送的数据暂存到缓存中,然后启动线程池从缓存中取数据进行处理。如果大量优惠券信息推送至缓存,当线程池处理能力有限或者存储的时间维度拉长,极易导致缓存溢出。线程池异步处理优惠券数据,当没有反馈机制时,也无法预知数据的处理结果,很容易导致推送的用户数据失败。



技术实现要素:

本发明的一个方面提供了一种向客户端推送用户数据的方法,包括:获取至少一个用户的用户数据;通过线程池中的线程处理所述用户数据,每个线程对相应用户的用户数据进行处理;判断所述处理是否成功;如果所述处理成功,则向所述相应用户的客户端推送处理后的用户数据,否则重新调度线程进行所述处理。

本发明的另一个方面提供了一种向客户端推送用户数据的系统,包括:获取模块,获取至少一个用户的用户数据;处理模块,通过线程池中的线程处理所述用户数据,每个线程对相应用户的用户数据进行处理;判断模块,判断所述处理是否成功;以及主控模块,如果所述处理成功,则向所述相应用户的客户端推送处理后的用户数据,否则重新调度线程进行所述处理。

本发明的另一个方面提供了一种向客户端推送用户数据的系统,包括:至少一个处理器;至少一个存储器,存储有可执行指令,所述指令在被所述至少一个处理器执行时,使得所述处理器:获取至少一个用户的用户数据;通过线程池中的线程处理所述用户数据,每个线程对相应用户的用户数据进行处理;判断所述处理是否成功;如果所述处理成功,则向所述相应用户的客户端推送处理后的用户数据,否则重新调度线程进行所述处理。

附图说明

为了更完整地理解本发明及其优势,现在将参考结合附图的以下描述,其中:

图1示意性示出了根据本发明实施例的向客户端推送用户数据的方法的流程图。

图2a-2c示意性示出了根据本发明实施例的向客户端推送用户数据的系统的系统框图。

图3示意性示出了根据本发明另一实施例的向客户端推送用户数据的系统的系统框图。

具体实施方式

根据结合附图对本发明示例性实施例的以下详细描述,本发明的其它方面、优势和突出特征对于本领域技术人员将变得显而易见。

在本发明中,术语“包括”和“含有”及其派生词意为包括而非限制;术语“或”是包含性的,意为和/或。

在本说明书中,下述用于描述本发明原理的各种实施例知识说明,不应该以任何方式解释为限制发明的范围。参照附图的下述描述用于帮助全面理解由权利要求及其等同物限定的本发明的示例性实施例。下述描述包括多种具体细节来帮助理解,但这些细节应认为仅仅是示例性的。因此,本领域普通技术人员应认识到,在不背离本发明的范围和精神的情况下,可以对本文中描述的实施例进行多种改变和修改。此外,为了清楚和简洁起见,省略了公知功能和结构的描述。此外,贯穿附图,相同参考数字用于相思功能和操作。

图1示意性示出了根据本发明实施例的向客户端推送用户数据的方法的流程图。根据本发明的实施例,该方法可以通过计算机系统实现。

如图1所示,在步骤S1,获取用户数据。根据本发明实施例,所述获取可以是定时自动获取,也可以是根据系统管理者的指令而获取。获取用户数据可以包括获取至少一个用户的用户数据。用户数据例如可以包括优惠券、代金券、抵用券、礼品卡以及红包中的一种或者多种或者其任意组合。可以从大数据平台获取每个用户的用户数据。在本发明的实施例中,可以对计算机系统设置定时任务,每隔一定的时间,计算机系统根据用户数据的状态或过期时间特征从大数据平台上获取至少一个用户在一定时间段内(例如,三天内)的所有用户数据。例如,计算机系统可以每天十点从大数据平台上,根据用户的优惠券、代金券等是否被使用过、是否过期等特征,提取该用户三天内的所有优惠券以及代金券等用户数据。

在步骤S2,将获取的用户数据存储在第一存储系统中。根据本发明实施例,所述第一存储系统可以包括ElasticSearch(ES)搜索引擎。ElasticSearch搜索引擎能够很好地将数据进行全局排序和查询。该第一存储系统包括至少一个分片。在本发明的实施例中,可以将获取的用户数据先存在云存储中,并在需要对其进行处理时,将用户数据从云存储中提取出来并写入第一存储系统中。根据本发明的实施例,在第一存储系统中,每个用户的用户数据与该用户的标识相关联地存储。例如,当第一存储系统包括ElasticSearch(ES)搜索引擎时,可以将每一个用户的优惠券、代金券等详细数据存储在一个ES分片中,可以通过该用户的标识(例如该用户的个人识别码(pin)),路由到该ES分片,从而获得该用户的用户数据。例如,可以设定在预定时间(例如,每天的十二点)或根据系统管理者的指令,从云存储中提取用户A的全部用户数据(例如,优惠券、代金券等)写入到ES分片1中,将用户B的用户数据写入ES分片2中,依次类推,每一个分片只存储一个用户的全部用户数据。

在步骤S3,将用户的标识存储在第二存储系统中。根据本发明实施例,所述第二存储系统可以包括mySql数据库。在本发明的实施例中,可以在将用户数据写入第一存储系统的同时,将相应的用户标识写入mySql数据库中。例如,计算机系统可以在从云存储中提取用户A的数据存入ES分片1的同时,将该用户A的用户标识存储在mySql中,在从云存储中提取用户B的数据存入ES分片2的同时,将该用户B的用户标识存储在mySql中。

根据本发明的实施例,采用两套存储系统相对应地分别存储用户数据和用户标识,例如第一存储系统存储用户数据,第二存储系统存储相应的用户标识,其中第一存储系统可以对数据进行全局排序和查询,避免第二系统的资源浪费。在本发明实施例中,第一存储系统可以是ElasticSearch搜索引擎,第二存储系统可以是mySql数据库,ElasticSearch搜索引擎能够很好地将数据进行全局排序和查询,可以保证良好的规则筛选性能,避免使用mySql数据库进行分表操作以及资源浪费,减少数据库的交互。

在步骤S4,启动线程池。根据本发明实施例,所述线程池可以是FutureTask线程池。在本发明实施例中,可以根据第一存储系统的分片数量构建并启动FutureTask线程池,例如当需要处理的分片数量大于线程数量时,分片可以排队等待线程空闲后处理,当需要处理的分片数量小于线程数据量时,线程空闲等待新的分片任务。线程池中的每个线程自启动后异步操作。

根据本发明的实施例,采用带有反馈机制的线程池对用户数据进行处理,可以保证用户数据推送的成功率,提高解决相关场景问题的稳定性。在本发明实施例中,线程池可以是FutureTask线程池,FutureTask线程池可以实现多线程异步操作,并且FutureTask具有反馈机制,可以保证数据处理的成功率。在步骤S5,从第二存储系统中获取未处理状态的用户标识。根据本发明实施例,FutureTask线程池中的每个线程可以从mySql数据库中,获取未处理状态的用户标识。

在步骤S6,通过用户标识在第一存储系统中查找到相应的用户数据。根据本发明实施例,所述用户标识与用户数据相对应地存储。线程池中的线程在获取未处理状态的用户标识后,根据所述用户标识在第一存储系统中查找到与所述用户标识相应的用户的用户数据。在本发明实施例中,线程从mySql数据库中获取未处理状态的用户标识,按用户标识路由到第一存储系统中的相应ES分片,可以在该分片上找到所述用户标识对应的用户的全部优惠券、代金券等信息。例如,一个线程在mySql数据库中获取用户A的用户标识,按照该用户标识路由到ES分片1,在ES分片1中找到该用户A的全部优惠券、代金券等信息。

在步骤S7,对用户数据进行排序处理。根据本发明的实施例,每个线程可以对同一用户的用户数据进行排序处理。根据本发明实施例,可以利用第二存储系统的ElasticSearch搜索引擎的排序搜索机制进行查询,按照优惠力度倒序输出用户优惠券的排序结果。

在步骤S8,对用户数据进行去重处理,去除同一用户的重复用户数据。根据本发明实施例,每一个优惠券都对应有唯一一个couponkey,根据couponkey对一名用户的全部优惠券进行去重,从而使得给一个用户推送的优惠券信息中同一个优惠信息唯一。

在步骤S9,对用户数据进行合并处理,把要推送给用户的多个用户数据按规则合并。根据本发明实施例,按照推送规则以及文案展示规则将多个优惠券进行合并。例如,该用户有5个优惠券,根据预定规则,可以将其中3个优惠力度最大的优惠信息进行合并成一条消息,另外两个合并成第二条消息。也可以把要推送给用户的数据合并为一条信息。

在步骤S10,判断上述处理是否成功。根据本发明实施例,上述处理包括排序处理、去重处理以及合并处理的一种或者多种或者其任意组合。在本发明实施例中,在对数据进行处理的过程中,如果出现了错误,FutureTask线程池将错误信息记录在当前线程的FutureResult中,在Future.get()等待当前线程执行完成并获得结果。进行数据校验,判断当前线程在处理用户数据过程中是否出现了错误。如果出现了错误,则反馈结果,FutureTask线程池会再次调度线程进行处理。否则进行下一步骤。本发明的实施例因为引入了反馈判断机制,保证用户数据推送的成功率,大大提高解决相关场景问题的稳定性。

在步骤S11,推送处理后的用户数据。根据本发明实施例,当判断数据处理成功后,将处理后的用户数据,推送给客户端。

在步骤S12,将处理成功的用户数据对应的标识标记为已处理。根据本发明实施例,当判断某一用户数据处理成功后,将该用户的用户标识标记为已处理。例如,用户A的用户数据已成功处理,则将mySql中的用户A的用户标识改为已处理。

图2a-2c示意性示出了根据本发明实施例的向客户端推送用户数据的系统200的系统框图。

如图2a所示,根据本发明实施例的向客户端推送用户数据的系统200包括:获取模块210、存储模块220、处理模块230、判断模块240、主控模块250以及标记模块260。

获取模块210获取至少一个用户的用户数据。

图2b示出了根据本发明实施例的存储系统300的系统框图。如图2b所示,存储系统300包括云存储系统301、第一存储系统302以及第二存储系统303,所述第一存储系统302可以包括至少一个分片。

根据本发明的实施例,获取模块210可以从大数据平台获取用户数据。该获取可以是定时自动获取,也可以是根据系统管理者的指令而获取。获取用户数据可以包括获取至少一个用户的用户数据。用户数据例如可以包括优惠券、代金券、抵用券、礼品卡以及红包中的一种或者多种或者其任意组合。可以从大数据平台获取每个用户的用户数据。在本发明的实施例中,可以每隔一定的时间,根据用户数据的状态或过期时间特征从大数据平台上获取至少一个用户在一定时间段内(例如,三天内)的所有用户数据。例如,可以每天十点从大数据平台上,根据用户的优惠券、代金券等是否被使用过、是否过期等特征,提取该用户三天内的所有优惠券以及代金券等用户数据。

存储模块220可以将从大数据平台获取的用户数据存储在存储系统300中。

图2b示出了根据本发明实施例的存储系统300的示意框图。根据本发明的实施例,存储系统300可以包括云存储系统301、第一存储系统302和第二存储系统303。存储模块220可以先将获取的用户数据存储在云存储系统301中。根据本发明实施例,所述云存储系统301可以是京东云存储JSS。然后,存储模块220可以从云存储系统301中提取用户的用户数据以及相对应的用户标识,将用户的用户数据写入第一存储系统302中,将该用户相对应的用户标识写入第二存储系统303中。根据本发明实施例,第一存储系统302可以包括ElasticSearch搜索引擎,ElasticSearch搜索引擎能够很好地将数据进行全局排序和查询。在此情况下,第一存储系统可以包括多个ES分片。从大数据平台获取的每一个用户的全部用户数据存储于第一存储系统302中的同一个ES分片中。在第一存储系统中,每个用户的用户数据与该用户的标识相关联地存储。例如,可以将第一存储系统设置为能够通过用户标识而确定相应的分片。第二存储系统303可以包括mySql数据库。

处理模块230通过线程池中的线程处理用户数据,每个线程对相应用户的所有用户数据进行处理。根据本发明实施例,所述线程池是FutureTask线程池。启动线程池后,线程池中的每个线程自启动后异步操作,线程池中的每个线程在存储系统300中获取用户数据。在本发明实施例中,每个线程从mySql数据库中获取未处理状态的用户标识,按用户标识路由到第二存储系统中的相应ES分片,可以在该分片上找到所述用户标识对应的用户的全部优惠券、代金券等信息。处理模块230对用户数据进行处理,所述处理可以是去重处理、排序处理以及合并处理中的一种或多种或其任意组合。根据本发明的实施例,线程可以调用第二存储系统的ElasticSearch搜索引擎的排序搜索机制进行用户数据的查询,从而很迅速建议地获取排序结果。

判断模块240判断上述处理模块230中数据处理是否成功。根据本发明实施例,在数据处理模块230对数据进行处理的过程中,如果出现了错误,FutureTask线程池将错误信息记录在当前线程的FutureResult中,在Future.get()等待当前线程执行完成拿到结果。进行数据校验,判断当前线程在处理用户数据过程中是否出现了错误。本发明的实施例因为引入了反馈判断机制,保证用户数据推送的成功率,大大提高解决相关场景问题的稳定性。

如果判断模块240判断数据处理成功,则主控模块250向所述相应用户的客户端推送处理后的用户数据,否则重新调度线程进行所述处理。根据本发明实施例,当判断模块240反馈数据处理成功,则主控模块250将处理后的用户数据推送给该用户的客户端,如果判断模块240反馈数据处理失败,则主控模块250重新调度线程池中的线程再一次对该用户的用户数据进行数据处理,直至该用户的用户数据处理成功推送给客户端。

标记模块260将处理成功的用户数据对应的标识标记为已处理。根据本发明实施例,当判断模块240判断某一用户数据处理成功后,标记模块260将该用户的用户标识标记为已处理。

图2c是根据本发明实施例的向客户端推送用户数据的系统的处理模块230的示意图。

如图2c所示,处理模块230包括:去重处理模块231、排序处理模块232以及合并处理模块233。

去重处理模块231对用户数据进行去重处理,去除同一用户的重复用户数据。根据本发明实施例,每一个优惠券都对应有唯一一个couponkey,根据couponkey对一名用户的全部优惠券进行去重,从而达到给一个用户推送的优惠券信息中同一个优惠信息唯一。

排序处理模块232对用户数据进行排序处理,对同一用户的用户数据进行排序处理。根据本发明实施例,利用ElasticSearch搜索引擎的排序search查询,按照优惠力度倒序输出用户优惠券的排序结果。

合并处理模块233对用户数据进行合并处理,把要推送给用户的多个用户数据按规则合并。根据本发明实施例,按照推送规则以及文案展示规则将多个优惠券进行合并。例如,该用户有5个优惠券,根据推送规则,将其中3个优惠力度最大的优惠信息进行合并成一条消息,另外两个合并成第二条消息。根据本发明的实施例,也可以把要发送给用户的用户数据合并为一条消息。

图3示意性示出了根据本发明另一实施例的向客户端推送用户数据的系统的系统框图。

如图3所示,向客户端推送用户数据的系统包括存储器310以及处理器320。所述存储器310包括至少一个存储器,所述处理器320包括至少一个处理器。

存储器310用于存储机器可读指令。

处理器320可以执行所述机器可读指令,以获取至少一个用户的用数据。通过线程池中的线程处理所述用户数据,每个线程对相应的一个用户的用户数据进行处理。判断所述处理是否成功,如果所述处理成功,则向所述相应用户的客户端推送处理后的用户数据,否则重新调度线程进行所述处理。

根据本发明的实施例,所述获取至少一个用户的用户数据可以是定时自动获取,也可以是按指令获取。所述用户数据包括优惠券、代金券、抵用券、礼品卡以及红包中的一种或者多种或者其任意组合。每一个用户所持有的用户数据相关信息都在大数据平台中。在本发明实施例中,根据用户数据的状态及过期时间特征从大数据平台上获取至少一个用户三天的所有用户数据。例如每天十点从数据平台上,根据该名用户的优惠券、代金券等是否使用、是否过期等特征,提取该用户三天内的所有优惠券以及代金券等用户数据。

根据本发明的实施例,所述指令在被所述至少一个处理器执行时,还使得所述处理器在第一存储系统中将获取的所述用户数据与相应用户的标识相关联地存储,将所述用户的标识存储在第二存储系统中。在本发明的实施例中,第一存储系统包括ElasticSearch搜索引擎,第二存储系统为mySql数据库。处理器将用户的用户数据写入ElasticSearch搜索引擎中,将用户标识写入mySql数据库中。例如,可以将每一个用户的优惠券、代金券等详细数据存储在ElasticSearch搜索引擎的一个分片中。例如,将用户A的优惠券、代金券等详细数据写入到ElasticSearch搜索引擎的ES分片1中,则所述该用户A的全部用户数据存储于该片ES分片1中,然后将与用户A的用户标识写入mySql数据库中,所述用户标识与该用户的用户数据相对应,当线程访问mySql数据库中的用户标识后,可以通过路由在ElasticSearch搜索引擎的一个分片中找到该用户的全部用户数据。

根据本发明的实施例,所述线程池是FutureTask线程池,根据所述第一存储系统中的分片数量启动线程池。在本发明实施例中,根据ElasticSearch搜索引擎的分片数量构建并启动FutureTask线程池,线程池中的每个线程自启动后异步操作。

根据本发明的实施例,所述通过线程池中的线程处理所述用户数据,每个线程对相应用户的所有用户数据进行处理包括去重处理、排序处理以及合并处理中的至少一种。在本发明实施例中,排序处理可以利用ElasticSearch搜索引擎的排序搜索机制进行查询,按照优惠力度倒序输出用户优惠券的排序结果。去重处理可以根据每一个优惠券所对应的唯一的一个couponkey对一名用户的全部优惠券进行去重,从而达到给一个用户推送的优惠券信息中同一个优惠信息唯一。合并处理可以按照推送规则以及文案展示规则将多个优惠券进行合并,例如,该用户有5个优惠券,根据推送规则,将其中3个优惠力度最大的优惠信息进行合并成一条消息,另外两个合并成第二条消息。也可以把要发送给一个用户的用户数据合并为一条消息。

根据本发明的实施例,所述判断处理是否成功是在对数据进行处理的过程中,如果出现了错误,FutureTask线程池将错误信息记录在当前线程的FutureResult中,在Future.get()等待当前线程执行完成拿到结果。进行数据校验,判断当前线程在处理用户数据过程中是否出现了错误。如果出现了错误,则反馈结果,FutureTask线程池会再次调度线程进行处理。否则进行下一步骤。本发明的实施例因为引入了反馈判断机制,保证用户数据推送的成功率,大大提高解决相关场景问题的稳定性。

根据本发明的实施例,所述指令在被所述至少一个处理器执行时,还使得所述处理器将处理成功的用户数据对应的标识标记为已处理。

根据本发明各实施例的上述方法、装置、单元和/或模块可以通过有计算能力的电子设备执行包含计算机指令的软件来实现。该系统可以包括存储设备,以实现上文所描述的各种存储。所述有计算能力的电子设备可以包含通用处理器、数字信号处理器、专用处理器、可重新配置处理器等能够执行计算机指令的装置,但不限于此。执行这样的指令使得电子设备被配置为执行根据本发明的上述各项操作。上述各设备和/或模块可以在一个电子设备中实现,也可以在不同电子设备中实现。这些软件可以存储在计算机可读存储介质中。计算机可读存储介质存储一个或多个程序(软件模块),所述一个或多个程序包括指令,当电子设备中的一个或多个处理器执行所述指令时,所述指令使得电子设备执行本发明的方法。

根据本发明的上述实施例,在对海量消息进行处理时,引入判断反馈机制,提高了解决相关场景问题的稳定性;采用两套存储系统,减少数据库的交互,避免大量的缓存操作。

这些软件可以存储为易失性存储器或非易失性存储装置的形式(比如类似ROM等存储设备),不论是可擦除的还是可重写的,或者存储为存储器的形式(例如RAM、存储器芯片、设备或集成电路),或者被存储在光可读介质或磁可读介质上(比如,CD、DVD、磁盘或磁带等等)。应该意识到,存储设备和存储介质是适于存储一个或多个程序的机器可读存储装置的实施例,所述一个程序或多个程序包括指令,当所述指令被执行时,实现本发明的实施例。实施例提供程序和存储这种程序的机器可读存储装置,所述程序包括用于实现本发明的任何一项权利要求所述的装置或方法的代码。此外,可以经由任何介质(比如,经由有线连接或无线连接携带的通信信号)来电传递这些程序,多个实施例适当地包括这些程序。

根据本发明各实施例的方法、装置、单元和/或模块还可以使用例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC)或可以以用于对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式的适当组合来实现。该系统可以包括存储设备,以实现上文所描述的存储。在以这些方式实现时,所使用的软件、硬件和/或固件被编程或设计为执行根据本发明的相应上述方法、步骤和/或功能。本领域技术人员可以根据实际需要来适当地将这些系统和模块中的一个或多个,或其中的一部分或多个部分使用不同的上述实现方式来实现。这些实现方式均落入本发明的保护范围。

尽管已经参照本发明的特定示例性实施例示出并描述了本发明,但是本领域技术人员应该理解,在不背离所附权利要求及其等同物限定的本发明的精神和范围的情况下,可以对本发明进行形式和细节上的多种改变。因此,本发明的范围不应该限于上述实施例,而是应该不仅由所附权利要求来进行确定,还由所附权利要求的等同物来进行限定。

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