一种基于循环队列的消息推送量统计方法和装置制造方法及图纸

技术编号:19702621 阅读:23 留言:0更新日期:2018-12-08 14:16
本发明专利技术提供了一种基于循环队列的消息推送量统计方法和装置。通过将被推送的消息的数据插入循环队列中,周期性地轮询循环队列中的每一条消息数据,获取每一消息的发送量并进行相关数学计算,得到每一消息的各时间段的推送量,并将过期的消息的数据从循环队列中删除,避免了从数据库查询未过期的所有消息的步骤,大大减少了数据库的查询工作量,降低了数据库的工作压力,并显著提升了推送量统计的更新速度,从而适用于千万级推送数据量的统计。

【技术实现步骤摘要】
一种基于循环队列的消息推送量统计方法和装置
本专利技术涉及互联网
,特别是一种基于循环队列的消息推送量统计方法、基于循环队列的消息推送量统计装置、计算机存储介质以及计算设备。
技术介绍
随着移动互联网技术的飞速发展以及电子设备智能化的普及,互联网成为当今主流的信息传播平台之一,同时,消息推送也成为通过互联网进行信息传播的主要手段之一。消息推送通常由信息传播平台(例如具有消息推送功能的应用服务平台)将用户期望获取的信息(如即时通讯信息、新闻资讯、营销活动信息)等以消息的形式推送给用户,可以有效提高信息传播平台上用户的活跃度。在消息推送服务中,每条消息都对应一个推送量,并且推送量在消息的有效期内是实时上涨的。为了分析了解用户的喜好,以便进一步制定个性化的推送方案,需要统计各个时段(比如,每小时内)推送量的变化情况。现有技术中,通过周期性地(比如,每小时)去数据库轮询所有已发送的但未过期的消息,查询这些消息各自的推送量,并进行相关数学计算来得到推送量的变化情况。但是,当推送服务大量使用时,每小时待更新的数据峰值可能达到超过一千万的数据量。在这种情况下,数据库查询的操作量和压力将会非常大。并且,对于某些消息,可能在当前时间查询推送量并没有获取到有用数据。例如,当查询到的推送量为0,或者当前查询到的推送量相较前一小时的推送量没有变化时,获取到的数据即为无用数据。这导致了大量的查询超时和无用的计算。因此,亟需一种适用于千万级数据量的能够显著减少查询操作量并提升推送量统计速度的消息推送量统计方法。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的基于循环队列的消息推送量统计方法、基于循环队列的消息推送量统计装置、计算机存储介质以及计算设备。根据本专利技术实施例的一方面,提供了一种基于循环队列的消息推送量统计方法,包括:创建一循环队列,并设置所述循环队列的首次轮询开始时间和轮询周期,其中,每推送一条消息,则将所述消息的消息数据从所述循环队列的队尾插入所述循环队列中;所述消息数据包括消息唯一标识、计数时间、发送总量和有效时间;所述计数时间的初始值设为从所述消息被推送至下一次轮询开始时间范围内的任一时刻,所述发送总量的初始值设为0;当每次轮询开始时间到达时,重复进行如下步骤:从所述循环队列的队头取出一消息数据;判断当前取出的消息数据中的计数时间是否大于本次轮询开始时间;若当前取出的消息数据中的计数时间小于或等于本次轮询开始时间,则根据该消息数据中的消息唯一标识获取该消息的当前发送总量,并根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间;根据该消息数据中的有效时间判断该消息是否已过期;若是,则丢弃该消息数据,若否,则将更新后的消息数据从所述循环队列的队尾重新插入所述循环队列中;若当前取出的消息数据中的计数时间大于本次轮询开始时间,则将该消息数据从所述循环队列的队尾重新插入所述循环队列中,退出本次轮询,直到下一次轮询开始时间到达。可选地,根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间,包括:比较所获取的该消息的当前发送总量是否大于该消息数据中记录的发送总量;若所获取的该消息的当前发送总量大于该消息数据中记录的发送总量,则计算所获取的该消息的当前发送总量与该消息数据中记录的发送总量的差值,作为该消息的发送增长量,根据所述消息唯一标识将所述发送增长量存入所述指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间;若所获取的该消息的当前发送总量小于或等于该消息数据中记录的发送总量,则将该消息数据中的计数时间更新为下一次轮询开始时间。可选地,根据该消息数据中的有效时间判断该消息是否已过期,包括:比较该消息数据中的有效时间是否小于或等于本次轮询开始时间;若是,则判断该消息已过期,否则,判断该消息未过期。可选地,所述消息数据还包括应发送的设备数量;在根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间之后,所述方法还包括:确定该消息的推送方式;若该消息的推送方式为单播或多播,则判断所获取的该消息的当前发送总量是否等于所述应发送的设备数量,若是,则丢弃该消息数据,若否,则进行根据该消息数据中的有效时间判断该消息是否已过期的步骤;若该消息的推送方式为广播,则直接进行根据该消息数据中的有效时间判断该消息是否已过期的步骤。可选地,所述消息数据还包括发送类型;确定该消息的推送方式,包括:根据该消息数据中记录的发送类型确定该消息的推送方式。可选地,所述应发送的设备数量通过如下方式得到:获取该消息被推送时的用户列表;对所述用户列表中的用户数量进行计数。可选地,所述消息数据还包括到达总量,所述到达总量的初始值设为0;在判断出当前取出的消息数据中的计数时间小于或等于本次轮询开始时间之后,所述方法还包括:根据该消息数据中的消息唯一标识获取该消息的当前到达总量;根据所获取的该消息的当前到达总量和该消息数据中记录的到达总量的比较结果,计算该消息的当前到达总量与该消息数据中记录的到达总量的差值,作为该消息的到达增长量,根据所述消息唯一标识将该消息的到达增长量存入所述指定数据库中,并将该消息数据中的到达总量更新为所获取的该消息的当前到达总量。可选地,所述循环队列是redis循环队列。可选地,所述指定数据库是MySQL数据库。根据本专利技术实施例的另一方面,还提供了一种基于循环队列的消息推送量统计装置,包括:循环队列创建模块,适于创建一循环队列,并设置所述循环队列的首次轮询开始时间和轮询周期,其中,每推送一条消息,则将所述消息的消息数据从所述循环队列的队尾插入所述循环队列中;所述消息数据包括消息唯一标识、计数时间、发送总量和有效时间;所述计数时间的初始值设为从所述消息被推送至下一次轮询开始时间范围内的任一时刻,所述发送总量的初始值设为0;消息数据取出模块,适于从所述循环队列的队头取出一消息数据;计数时间判断模块,适于判断当前取出的消息数据中的计数时间是否大于本次轮询开始时间;消息数据更新模块,适于若当前取出的消息数据中的计数时间小于或等于本次轮询开始时间,则根据该消息数据中的消息唯一标识获取该消息的当前发送总量,并根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结本文档来自技高网...

【技术保护点】
1.一种基于循环队列的消息推送量统计方法,包括:创建一循环队列,并设置所述循环队列的首次轮询开始时间和轮询周期,其中,每推送一条消息,则将所述消息的消息数据从所述循环队列的队尾插入所述循环队列中;所述消息数据包括消息唯一标识、计数时间、发送总量和有效时间;所述计数时间的初始值设为从所述消息被推送至下一次轮询开始时间范围内的任一时刻,所述发送总量的初始值设为0;当每次轮询开始时间到达时,重复进行如下步骤:从所述循环队列的队头取出一消息数据;判断当前取出的消息数据中的计数时间是否大于本次轮询开始时间;若当前取出的消息数据中的计数时间小于或等于本次轮询开始时间,则根据该消息数据中的消息唯一标识获取该消息的当前发送总量,并根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间;根据该消息数据中的有效时间判断该消息是否已过期;若是,则丢弃该消息数据,若否,则将更新后的消息数据从所述循环队列的队尾重新插入所述循环队列中;若当前取出的消息数据中的计数时间大于本次轮询开始时间,则将该消息数据从所述循环队列的队尾重新插入所述循环队列中,退出本次轮询,直到下一次轮询开始时间到达。...

【技术特征摘要】
1.一种基于循环队列的消息推送量统计方法,包括:创建一循环队列,并设置所述循环队列的首次轮询开始时间和轮询周期,其中,每推送一条消息,则将所述消息的消息数据从所述循环队列的队尾插入所述循环队列中;所述消息数据包括消息唯一标识、计数时间、发送总量和有效时间;所述计数时间的初始值设为从所述消息被推送至下一次轮询开始时间范围内的任一时刻,所述发送总量的初始值设为0;当每次轮询开始时间到达时,重复进行如下步骤:从所述循环队列的队头取出一消息数据;判断当前取出的消息数据中的计数时间是否大于本次轮询开始时间;若当前取出的消息数据中的计数时间小于或等于本次轮询开始时间,则根据该消息数据中的消息唯一标识获取该消息的当前发送总量,并根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间;根据该消息数据中的有效时间判断该消息是否已过期;若是,则丢弃该消息数据,若否,则将更新后的消息数据从所述循环队列的队尾重新插入所述循环队列中;若当前取出的消息数据中的计数时间大于本次轮询开始时间,则将该消息数据从所述循环队列的队尾重新插入所述循环队列中,退出本次轮询,直到下一次轮询开始时间到达。2.根据权利要求1所述的方法,其中,根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间,包括:比较所获取的该消息的当前发送总量是否大于该消息数据中记录的发送总量;若所获取的该消息的当前发送总量大于该消息数据中记录的发送总量,则计算所获取的该消息的当前发送总量与该消息数据中记录的发送总量的差值,作为该消息的发送增长量,根据所述消息唯一标识将所述发送增长量存入所述指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间;若所获取的该消息的当前发送总量小于或等于该消息数据中记录的发送总量,则将该消息数据中的计数时间更新为下一次轮询开始时间。3.根据权利要求1或2所述的方法,其中,根据该消息数据中的有效时间判断该消息是否已过期,包括:比较该消息数据中的有效时间是否小于或等于本次轮询开始时间;若是,则判断该消息已过期,否则,判断该消息未过期。4.根据权利要求1-3中任一项所述的方法,其中,所述消息数据还包括应发送的设备数量;在根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间之后,所述方法还包括:确定该消息的推送方式;若该消息的推送方式为单播或多播,则判断所获取的该消息的当前发送总量是否等于所述应发送的设备数量,若是,则丢弃该消息数...

【专利技术属性】
技术研发人员:杨森源
申请(专利权)人:北京奇虎科技有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1