CN108965032A - 一种基于循环队列的消息推送量统计方法和装置 - Google Patents
一种基于循环队列的消息推送量统计方法和装置 Download PDFInfo
- Publication number
- CN108965032A CN108965032A CN201810961358.9A CN201810961358A CN108965032A CN 108965032 A CN108965032 A CN 108965032A CN 201810961358 A CN201810961358 A CN 201810961358A CN 108965032 A CN108965032 A CN 108965032A
- Authority
- CN
- China
- Prior art keywords
- message
- total amount
- message data
- round
- time
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/14—Network analysis or design
- H04L41/142—Network analysis or design using statistical or mathematical methods
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/10—Active monitoring, e.g. heartbeat, ping or trace-route
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/21—Monitoring or handling of messages
- H04L51/214—Monitoring or handling of messages using selective forwarding
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- Algebra (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Pure & Applied Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Cardiology (AREA)
- General Health & Medical Sciences (AREA)
- Mobile Radio Communication Systems (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供了一种基于循环队列的消息推送量统计方法和装置。通过将被推送的消息的数据插入循环队列中,周期性地轮询循环队列中的每一条消息数据,获取每一消息的发送量并进行相关数学计算,得到每一消息的各时间段的推送量,并将过期的消息的数据从循环队列中删除,避免了从数据库查询未过期的所有消息的步骤,大大减少了数据库的查询工作量,降低了数据库的工作压力,并显著提升了推送量统计的更新速度,从而适用于千万级推送数据量的统计。
Description
技术领域
本发明涉及互联网技术领域,特别是一种基于循环队列的消息推送量统计方法、基于循环队列的消息推送量统计装置、计算机存储介质以及计算设备。
背景技术
随着移动互联网技术的飞速发展以及电子设备智能化的普及,互联网成为当今主流的信息传播平台之一,同时,消息推送也成为通过互联网进行信息传播的主要手段之一。消息推送通常由信息传播平台(例如具有消息推送功能的应用服务平台)将用户期望获取的信息(如即时通讯信息、新闻资讯、营销活动信息)等以消息的形式推送给用户,可以有效提高信息传播平台上用户的活跃度。
在消息推送服务中,每条消息都对应一个推送量,并且推送量在消息的有效期内是实时上涨的。为了分析了解用户的喜好,以便进一步制定个性化的推送方案,需要统计各个时段(比如,每小时内)推送量的变化情况。现有技术中,通过周期性地(比如,每小时)去数据库轮询所有已发送的但未过期的消息,查询这些消息各自的推送量,并进行相关数学计算来得到推送量的变化情况。但是,当推送服务大量使用时,每小时待更新的数据峰值可能达到超过一千万的数据量。在这种情况下,数据库查询的操作量和压力将会非常大。并且,对于某些消息,可能在当前时间查询推送量并没有获取到有用数据。例如,当查询到的推送量为0,或者当前查询到的推送量相较前一小时的推送量没有变化时,获取到的数据即为无用数据。这导致了大量的查询超时和无用的计算。
因此,亟需一种适用于千万级数据量的能够显著减少查询操作量并提升推送量统计速度的消息推送量统计方法。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的基于循环队列的消息推送量统计方法、基于循环队列的消息推送量统计装置、计算机存储介质以及计算设备。
根据本发明实施例的一方面,提供了一种基于循环队列的消息推送量统计方法,包括:
创建一循环队列,并设置所述循环队列的首次轮询开始时间和轮询周期,其中,每推送一条消息,则将所述消息的消息数据从所述循环队列的队尾插入所述循环队列中;所述消息数据包括消息唯一标识、计数时间、发送总量和有效时间;所述计数时间的初始值设为从所述消息被推送至下一次轮询开始时间范围内的任一时刻,所述发送总量的初始值设为0;
当每次轮询开始时间到达时,重复进行如下步骤:
从所述循环队列的队头取出一消息数据;
判断当前取出的消息数据中的计数时间是否大于本次轮询开始时间;
若当前取出的消息数据中的计数时间小于或等于本次轮询开始时间,则根据该消息数据中的消息唯一标识获取该消息的当前发送总量,并根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间;
根据该消息数据中的有效时间判断该消息是否已过期;若是,则丢弃该消息数据,若否,则将更新后的消息数据从所述循环队列的队尾重新插入所述循环队列中;
若当前取出的消息数据中的计数时间大于本次轮询开始时间,则将该消息数据从所述循环队列的队尾重新插入所述循环队列中,退出本次轮询,直到下一次轮询开始时间到达。
可选地,根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间,包括:
比较所获取的该消息的当前发送总量是否大于该消息数据中记录的发送总量;
若所获取的该消息的当前发送总量大于该消息数据中记录的发送总量,则计算所获取的该消息的当前发送总量与该消息数据中记录的发送总量的差值,作为该消息的发送增长量,根据所述消息唯一标识将所述发送增长量存入所述指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间;
若所获取的该消息的当前发送总量小于或等于该消息数据中记录的发送总量,则将该消息数据中的计数时间更新为下一次轮询开始时间。
可选地,根据该消息数据中的有效时间判断该消息是否已过期,包括:
比较该消息数据中的有效时间是否小于或等于本次轮询开始时间;
若是,则判断该消息已过期,否则,判断该消息未过期。
可选地,所述消息数据还包括应发送的设备数量;
在根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间之后,所述方法还包括:
确定该消息的推送方式;
若该消息的推送方式为单播或多播,则判断所获取的该消息的当前发送总量是否等于所述应发送的设备数量,若是,则丢弃该消息数据,若否,则进行根据该消息数据中的有效时间判断该消息是否已过期的步骤;
若该消息的推送方式为广播,则直接进行根据该消息数据中的有效时间判断该消息是否已过期的步骤。
可选地,所述消息数据还包括发送类型;
确定该消息的推送方式,包括:
根据该消息数据中记录的发送类型确定该消息的推送方式。
可选地,所述应发送的设备数量通过如下方式得到:
获取该消息被推送时的用户列表;
对所述用户列表中的用户数量进行计数。
可选地,所述消息数据还包括到达总量,所述到达总量的初始值设为0;
在判断出当前取出的消息数据中的计数时间小于或等于本次轮询开始时间之后,所述方法还包括:
根据该消息数据中的消息唯一标识获取该消息的当前到达总量;
根据所获取的该消息的当前到达总量和该消息数据中记录的到达总量的比较结果,计算该消息的当前到达总量与该消息数据中记录的到达总量的差值,作为该消息的到达增长量,根据所述消息唯一标识将该消息的到达增长量存入所述指定数据库中,并将该消息数据中的到达总量更新为所获取的该消息的当前到达总量。
可选地,所述循环队列是redis循环队列。
可选地,所述指定数据库是MySQL数据库。
根据本发明实施例的另一方面,还提供了一种基于循环队列的消息推送量统计装置,包括:
循环队列创建模块,适于创建一循环队列,并设置所述循环队列的首次轮询开始时间和轮询周期,其中,每推送一条消息,则将所述消息的消息数据从所述循环队列的队尾插入所述循环队列中;所述消息数据包括消息唯一标识、计数时间、发送总量和有效时间;所述计数时间的初始值设为从所述消息被推送至下一次轮询开始时间范围内的任一时刻,所述发送总量的初始值设为0;
消息数据取出模块,适于从所述循环队列的队头取出一消息数据;
计数时间判断模块,适于判断当前取出的消息数据中的计数时间是否大于本次轮询开始时间;
消息数据更新模块,适于若当前取出的消息数据中的计数时间小于或等于本次轮询开始时间,则根据该消息数据中的消息唯一标识获取该消息的当前发送总量,并根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间;
消息过期处理模块,适于根据该消息数据中的有效时间判断该消息是否已过期;若是,则丢弃该消息数据,若否,则将更新后的消息数据从所述循环队列的队尾重新插入所述循环队列中;以及
轮询结束执行模块,适于若当前取出的消息数据中的计数时间大于本次轮询开始时间,则将该消息数据从所述循环队列的队尾重新插入所述循环队列中,退出本次轮询,直到下一次轮询开始时间到达;
其中,当每次轮询开始时间到达时,所述消息数据取出模块、所述计数时间判断模块、所述消息数据更新模块、所述消息过期处理模块和所述轮询结束执行模块重复执行各自步骤,直到退出本次轮询。
可选地,所述消息数据更新模块还适于:
比较所获取的该消息的当前发送总量是否大于该消息数据中记录的发送总量;
若所获取的该消息的当前发送总量大于该消息数据中记录的发送总量,则计算所获取的该消息的当前发送总量与该消息数据中记录的发送总量的差值,作为该消息的发送增长量,根据所述消息唯一标识将所述发送增长量和存入所述指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间;
若所获取的该消息的当前发送总量小于或等于该消息数据中记录的发送总量,则将该消息数据中的计数时间更新为下一次轮询开始时间。
可选地,所述消息过期处理模块还适于:
比较该消息数据中的有效时间是否小于或等于本次轮询开始时间;
若是,则判断该消息已过期,否则,判断该消息未过期。
可选地,所述消息数据还包括应发送的设备数量;
所述装置还包括:
推送方式确定模块,适于在所述消息数据更新模块根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间之后,确定该消息的推送方式;
推送方式处理模块,适于若该消息的推送方式为单播或多播,则判断所获取的该消息的当前发送总量是否等于所述应发送的设备数量,若是,则丢弃该消息数据,若否,则触发所述消息过期处理模块;
若该消息的推送方式为广播,则直接触发所述消息过期处理模块。
可选地,所述消息数据还包括发送类型;
所述推送方式确定模块还适于:
根据该消息数据中记录的发送类型确定该消息的推送方式。
可选地,所述应发送的设备数量通过如下方式得到:
获取该消息被推送时的用户列表;
对所述用户列表中的用户数量进行计数。
可选地,所述消息数据还包括到达总量,所述到达总量的初始值设为0;
所述消息数据更新模块还适于:
在所述计数时间判断模块判断出当前取出的消息数据中的计数时间小于或等于本次轮询开始时间之后,根据该消息数据中的消息唯一标识获取该消息的当前到达总量;
根据所获取的该消息的当前到达总量和该消息数据中记录的到达总量的比较结果,计算该消息的当前到达总量与该消息数据中记录的到达总量的差值,作为该消息的到达增长量,根据所述消息唯一标识将该消息的到达增长量存入所述指定数据库中,并将该消息数据中的到达总量更新为所获取的该消息的当前到达总量。
可选地,所述循环队列是redis循环队列。
可选地,所述指定数据库是MySQL数据库。
根据本发明实施例的再一方面,还提供了一种计算机存储介质,所述计算机存储介质存储有计算机程序代码,当所述计算机程序代码在计算设备上运行时,导致所述计算设备执行根据上文中任一项所述的基于循环队列的消息推送量统计方法。
根据本发明实施例的又一方面,还提供了一种计算设备,包括:
处理器;以及
存储有计算机程序代码的存储器;
当所述计算机程序代码被所述处理器运行时,导致所述计算设备执行根据上文中任一项所述的基于循环队列的消息推送量统计方法。
本发明实施例提出的基于循环队列的消息推送量统计方法和装置,首先创建循环队列,每推送一条消息,则将被推送消息的消息数据从队尾插入循环队列中,并将消息数据中计数时间的初始值设为从该消息被推送至下一次轮询开始时间范围内的任一时刻,发送总量的初始值设为0。当每次轮询开始时间到达时,重复执行以下步骤:从循环队列的队头取出消息数据;若取出的消息数据中的计数时间小于或等于本次轮询开始时间,则获取消息的当前发送总量,根据获取的当前发送总量和消息数据中记录的发送总量,计算消息的发送增长量并存入数据库,将消息数据中的发送总量更新为所获取的当前发送总量,并将消息数据中的计数时间更新为下一次轮询开始时间,然后,若取出的消息数据对应的消息已过期,则丢弃该消息数据,否则,将更新后的消息数据从队尾重新插入循环队列中;若取出的消息数据中的计数时间大于本次轮询开始时间,则表明在本次轮询中循环队列中的所有数据都已经轮询了一遍,此时,将取出的消息数据从队尾重新插入循环队列中,退出本次轮询,直到下一次轮询开始时间到达。本发明通过将被推送的消息的数据插入循环队列中,周期性地轮询循环队列中的每一条消息数据,获取每一消息的发送量并进行相关数学计算,得到每一消息的各时间段的推送量,并将过期的消息的数据丢弃,保证循环队列中的消息均在有效期内,避免了从数据库查询未过期的所有消息的步骤,大大减少了数据库的查询工作量,降低了数据库的工作压力,并显著提升了推送量统计的更新速度,从而适用于千万级数据量的统计。
进一步,对于单播或多播推送方式的消息,还比较所获取的消息的当前发送总量和消息的应发送的设备数量。若消息的当前发送总量等于消息的应发送的设备数量,则说明该消息已经被送达所有应推送的用户,后续无需再轮询该消息。此时,丢弃该消息的数据,使其不再进入循环队列进行轮询,进一步减少了无用的查询和计算,提升推送量统计的更新速度。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一实施例的基于循环队列的消息推送量统计方法的流程图;
图2示出了根据本发明另一实施例的基于循环队列的消息推送量统计方法的流程图;
图3示出了根据本发明一实施例的基于循环队列的消息推送量统计装置的结构示意图;以及
图4示出了根据本发明另一实施例的基于循环队列的消息推送量统计装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
对于推送(push)服务中每条消息的推送量,目前采用的统计方法主要包括以下两个步骤:首先,从MySQL数据库查询出推送状态为已完成的、并且未过期的所有消息;然后,依次去查询这些消息中的每一条消息的当前发送总量,将得到的当前发送总量与数据库中记录的结果作对比分析,计算得出差值,记录差值并进行入库操作。
但是,发明人发现,当推送服务大量使用时,每小时待更新的数据峰值可能达到超过一千万的数据量,这时,从MySQL数据库查询未过期的所有消息就会导致数据库压力特别大,甚至查询超时。并且,对于有的消息,可能在当前时间查询推送量并没有获取到有用数据。例如,当查询到的推送量为0,或者当前查询到的推送量相较前一小时的推送量没有变化时,获取到的数据即为无用数据。这造成大量的无用的计算。
为解决上述技术问题,本发明实施例提出一种基于循环队列的消息推送量统计方法。图1示出了根据本发明一实施例的基于循环队列的消息推送量统计方法的流程图。参见图1,该方法可以包括以下步骤S102至步骤S112。
步骤S102,创建一循环队列,并设置循环队列的首次轮询开始时间和轮询,其中,每推送一条消息,则将该消息的消息数据从循环队列的队尾插入循环队列中;消息数据包括消息唯一标识、计数时间、发送总量和有效时间;计数时间的初始值设为从该消息被推送至下一次轮询开始时间范围内的任一时刻,发送总量的初始值设为0。
当每次轮询开始时间到达时,重复进行如下步骤:
步骤S104,从循环队列的队头取出一消息数据。
步骤S106,判断当前取出的消息数据中的计数时间是否大于本次轮询开始时间。
步骤S108,若当前取出的消息数据中的计数时间小于或等于本次轮询开始时间,则根据该消息数据中的消息唯一标识获取该消息的当前发送总量,并根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据消息唯一标识将发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间。
步骤S110,根据该消息数据中的有效时间判断该消息是否已过期;若是,则丢弃该消息数据,若否,则将更新后的消息数据从循环队列的队尾重新插入循环队列中。
步骤S112,若当前取出的消息数据中的计数时间大于本次轮询开始时间,则将该消息数据从循环队列的队尾重新插入循环队列中,退出本次轮询,直到下一次轮询开始时间到达。
本发明实施例提出的基于循环队列的消息推送量统计方法,通过将被推送的消息的数据插入循环队列中,周期性地轮询循环队列中的每一条消息数据,获取每一消息的发送量并进行相关数学计算,得到每一消息的各时间段的推送量,并将过期的消息的数据丢弃,保证循环队列中的消息均在有效期内,避免了从数据库查询未过期的所有消息的步骤,大大减少了数据库的查询工作量,降低了数据库的工作压力,并显著提升了推送量统计的更新速度,从而适用于千万级数据量的统计。
上文步骤S102中,首先创建一循环队列。此处提及的循环队列可以是redis循环队列。Redis(Remote Dictionary Server,远程字典服务器)是一种key-value存储系统,可以支持包括列表(list)在内的多种数据类型。Redis中的列表(list)的每个子元素都是string类型的双向链表,通过push、pop操作能够从链表的头部或者尾部添加删除元素,从而可用redis中的list实现队列。
上文提及的循环队列的首次轮询开始时间和轮询周期可以根据实际的产品需求进行设置。具体地,可以将首次轮询开始时间设置为首条消息被推送后的第一个整点时间,例如,若六点三十推送了首条消息,则将首次轮询开始时间设置为七点整;或者,可以将首次轮询开始时间设置为统计方所要求的开始时间。轮询周期可以设置为1小时、2小时等。将首次轮询开始时间和轮询周期分别设置为整点时间和整数时段,有利于简化统计时段设置,但本发明并不限于此。
在实际操作中,每推送成功一条消息,就立刻将该消息的消息数据作为一个队列元素从循环队列的队尾插入循环队列中。消息数据可以包括消息唯一标识、计数时间、发送总量和有效时间。其中,消息唯一标识可以是消息名、消息ID等。计数时间的初始值设为从该消息被推送至下一次轮询开始时间范围内的任一时刻,例如,在六点三十推送了消息,下一次轮询开始时间为七点整,则可以将计数时间的初始值设为六点三十至七点整之间的任意时刻。优选将计数时间的初始值设为下一次轮询开始时间,以简化计数时间的初始化操作。有效时间表示已推送的消息的有效期限,用于判断消息是否过期,对于过期的消息,将其数据从循环队列删除,避免无用的查询和计算。
下面列出了本发明一实施例中的redis循环队列中的一个队列元素(即,消息数据)的实例:
其中,efan_msg_id为消息唯一标识,count_time为计数时间,send_num为发送总量,effective_time为有效时间。需要说明的是,以上实例仅是示意性的,本发明并不限于此。
上文步骤S108中,若判断出当前取出的消息数据中的计数时间小于或等于本次轮询开始时间,则可以通过调用指定接口,根据消息唯一标识获取该消息的当前发送总量。进而,根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据消息唯一标识将发送增长量存入指定数据库中,以及将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间。
在本发明的可选实施例中,根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据消息唯一标识将发送增长量存入指定数据库中,以及将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间,可以具体地实施为以下步骤:
首先,比较所获取的该消息的当前发送总量是否大于该消息数据中记录的发送总量。
然后,若所获取的该消息的当前发送总量大于该消息数据中记录的发送总量,则计算所获取的该消息的当前发送总量与该消息数据中记录的发送总量的差值,作为该消息的发送增长量,根据消息唯一标识将发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间。若所获取的该消息的当前发送总量小于或等于该消息数据中记录的发送总量,则直接将该消息数据中的计数时间更新为下一次轮询开始时间。
具体举例来说,假设轮询周期为1小时,本次轮询开始时间为七点整,从循环队列的队头取出的消息数据中,消息ID为1,记录的发送总量(send_num)为10,所获取的该消息1的当前发送总量为12,比较得出所获取的该消息1的当前发送总量大于该消息数据中记录的发送总量,则将所获取的该消息1的当前发送总量12减去该消息数据中记录的发送总量10,得出差值2作为该消息的发送增长量,根据消息ID将该消息的发送增长量2存入指定数据库中,将该消息数据中的发送总量(send_num)更新为12,并将该消息数据中的计数时间(count_time)更新为下一次轮询开始时间(即,八点整)。
上文提及的指定数据库可以是MySQL数据库。MySQL是最流行的关系型数据库管理系统,其通过关联数据库将数据保存在不同的表中,从而增加了处理速度和管理灵活性。MySQL支持大型的数据库,可以处理拥有上千万条记录的大型数据库。因此,MySQL数据库非常适用于千万级数据量的消息推送统计中。
此外,在进行存入数据库操作时,除了根据消息唯一标识存入消息的发送增长量之外,还可以同时存入当前统计时间(如,本次轮询开始时间)、消息的当前发送总量(send_num)和键类型(key_type)等,以完善统计数据,更有利于后续数据分析。
在步骤S108之后,进行步骤S110,根据所取出的消息数据中的有效时间判断消息是否已过期;若是,则丢弃该消息数据,返回至步骤S104;若否,则将更新后的消息数据从循环队列的队尾重新插入循环队列中,返回至步骤S104。通过判断消息是否过期,保证循环队列中的消息均在有效期内,避免无用的查询和计算。
在本发明的可选实施例中,根据所取出的消息数据中的有效时间判断消息是否已过期,包括:
比较该消息数据中的有效时间是否小于或等于本次轮询开始时间,若是,则判断该消息已过期,否则,判断该消息未过期。
例如,假设所取出的消息数据中的有效时间(effective_time)的值为2018-08-106:30:00,本次轮询开始时间为2018-08-10 7:00:00(即,七点整),比较得出消息的有效时间小于本次轮询开始时间,则判断该消息已过期,后续无需再对该消息进行统计。
前文提及,在步骤S108中根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,进行了消息的发送增长量的计算和入库操作,以及消息数据的更新操作后,再进行步骤S110中消息是否过期的判断和相应处理。在一种可替换的实施方式中,也可以在进行了消息的发送增长量的计算和入库操作之后,先进行消息是否过期的判断,再根据判断结果进行丢弃消息数据、或更新消息数据并重新插入循环队列中。即,若所获取的该消息的当前发送总量大于该消息数据中记录的发送总量,则计算所获取的该消息的当前发送总量与该消息数据中记录的发送总量的差值,作为该消息的发送增长量,根据消息唯一标识将发送增长量存入指定数据库中之后,根据该消息数据中的有效时间判断该消息是否已过期;若是,则丢弃该消息数据,返回至步骤S104;若否,则将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间,然后将更新后的消息数据从循环队列的队尾重新插入循环队列中,返回至步骤S104。若所获取的该消息的当前发送总量小于或等于该消息数据中记录的发送总量,则先根据该消息数据中的有效时间判断该消息是否已过期;若是,则丢弃该消息数据,返回至步骤S104;若否,则直接将该消息数据中的计数时间更新为下一次轮询开始时间,然后将更新后的消息数据从循环队列的队尾重新插入循环队列中,返回至步骤S104。
在本发明的可选实施例中,参考上文列出的消息数据实例,循环队列中的消息数据还可以包括应发送的设备数量(命名为list_num)。
相应地,在根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据消息唯一标识将发送增长量存入指定数据库中,以及将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间之后,该消息推送量统计方法还可以包括:
确定该消息的推送方式;
若该消息的推送方式为单播或多播,则判断所获取的该消息的当前发送总量是否等于应发送的设备数量,若是,则丢弃该消息数据,若否,则进行根据该消息数据中的有效时间判断该消息是否已过期的步骤;
若该消息的推送方式为广播,则直接进行根据该消息数据中的有效时间判断该消息是否已过期的步骤。
消息的推送方式主要有三种:单播、多播和广播。单播是指一条消息只会发送给一个用户,多播是指一条消息会发送给多个用户,广播的对象则是全量用户。因此,对于单播或多播推送方式的消息,其可成功发送至的用户数量是确定的。通过确定消息的推送方式,进而对于单播或多播推送方式的消息,比较所获取的消息的当前发送总量和消息的应发送的设备数量,若消息的当前发送总量等于消息的应发送的设备数量,则说明该消息已经被送达所有应推送的用户,后续无需再轮询该消息。此时,丢弃该消息的数据,使其不再进入循环队列进行轮询,进一步减少了无用的查询和计算,提升推送量统计的更新速度。
在一个可选实施例中,继续参考上文列出的消息数据实例,循环队列中的消息数据还可以包括发送类型(命名为send_type)。此时,确定该消息的推送方式,包括:
根据该消息数据中记录的发送类型确定该消息的推送方式。
在实际应用中,可以采用不同的发送类型的值表示消息的发送类型。例如,1表示单播,2表示多播,3表示广播,等等。
在本发明的可选实施例中,应发送的设备数量可以通过如下方式得到:
获取该消息被推送时的用户列表;
对用户列表中的用户数量进行计数。
在本发明的可选实施例中,继续参考上文列出的消息数据实例,循环队列中的消息数据还可以包括到达总量(命名为arrive_num),到达总量的初始值设为0。
相应地,在判断出当前取出的消息数据中的计数时间小于或等于本次轮询开始时间之后,该方法还可以包括:
根据该消息数据中的消息唯一标识获取该消息的当前到达总量;
根据所获取的该消息的当前到达总量和该消息数据中记录的到达总量的比较结果,计算所获取的该消息的当前到达总量与该消息数据中记录的到达总量的差值,作为该消息到达增长量,根据消息唯一标识将该消息的到达增长量存入指定数据库中,并将该消息数据中的到达总量更新为所获取的该消息的当前到达总量。
进一步地,根据所获取的该消息的当前到达总量和该消息数据中记录的到达总量的比较结果,计算所获取的该消息的当前到达总量与该消息数据中记录的到达总量的差值,作为该消息到达增长量,根据消息唯一标识将该消息的到达增长量存入指定数据库中,并将该消息数据中的到达总量更新为所获取的该消息的当前到达总量,可以具体地实施为以下步骤:
首先,比较所获取的该消息的当前到达总量是否大于该消息数据中记录的到达总量。
然后,若所获取的该消息的当前到达总量大于该消息数据中记录的到达总量,则计算所获取的该消息的当前到达总量与该消息数据中记录的到达总量的差值,作为该消息的到达增长量,根据消息唯一标识将到达增长量存入指定数据库中,并将该消息数据中的到达总量更新为所获取的该消息的当前到达总量。若所获取的该消息的当前到达总量小于或等于该消息数据中记录的到达总量,则不作任何处理,直接进入下一步骤,从而避免无用的计算。
上文提及的到达总量是指被推送的消息已到达的用户的总数量。具体地,当服务器通过在用户客户端与服务器之间建立的长连接将消息下发至用户客户端,并收到客户端返回的ACK(Acknowledgement,确认字符)时,则认为消息已到达用户。
此外,除了在指定数据库中存入到达增长量外,也可以同时存入所获取的该消息的当前到达总量,以完善统计数据,更有利于后续数据分析。
通过统计各个时段(比如,每小时内)推送量的变化情况并存入指定数据库中,可以进一步根据数据库中存入的数据进行用户喜好分析,以便根据分析结果制定个性化的消息推送方案,更好地满足用户的个性化需求。
以上介绍了图1所示实施例的各个环节的多种实现方式,下面将通过具体实施例来详细介绍本发明的基于循环队列的消息推送量统计方法的实现过程。图2示出了根据本发明又一实施例的基于循环队列的消息推送量统计方法的流程图。参见图2,该方法至少可以包括步骤S202至步骤S228。
步骤S202,创建一redis循环队列,并设置循环队列的首次轮询开始时间和轮询周期,其中,每推送一条消息,则将该消息的消息数据从循环队列的队尾插入循环队列中;消息数据包括消息唯一标识、计数时间、发送总量、有效时间、应发送的设备数量和发送类型;计数时间的初始值设为下一次轮询开始时间,发送总量的初始值设为0。
当每次轮询开始时间到达时,进行如下步骤:
步骤S204,从循环队列的队头取出一消息数据。
步骤S206,判断当前取出的消息数据中的计数时间是否大于本次轮询开始时间,若是,则进行步骤S228,若否,则进行步骤S208。
步骤S208,根据该消息数据中的消息唯一标识获取该消息的当前发送总量。
步骤S210,比较所获取的该消息的当前发送总量是否大于该消息数据中记录的发送总量,若是,则进行步骤S212,若否,则进行步骤S214。
步骤S212,计算所获取的该消息的当前发送总量与该消息数据中记录的发送总量的差值,作为该消息的发送增长量,根据消息唯一标识将发送增长量存入MySQL数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间。
步骤S214,将该消息数据中的计数时间更新为下一次轮询开始时间。
步骤S216,根据该消息数据中记录的发送类型确定该消息的推送方式。
步骤S218,若该消息的推送方式为单播或多播,则判断所获取的该消息的当前发送总量是否等于该消息数据中记录的应发送的设备数量,若是,则丢弃该消息数据,返回至步骤S204,若否,则进行步骤S222。
步骤S220,若该消息的推送方式为广播,则转至步骤S222。
步骤S222,比较该消息数据中的有效时间是否小于或等于本次轮询开始时间;若是,则进行步骤S224,若否,则进行步骤S226。
步骤S224,判断该消息已过期,丢弃该消息数据,返回至步骤S204。
步骤S226,判断该消息未过期,将更新后的消息数据从循环队列的队尾重新插入循环队列中,返回至步骤S204。
步骤S228,将该消息数据从循环队列的队尾重新插入循环队列中,退出本次轮询,直到下一次轮询开始时间到达。
需要说明的是,实际应用中,上述所有可选实施方式可以采用结合的方式任意组合,形成本发明的可选实施例,在此不再一一赘述。
基于同一发明构思,本发明实施例还提供了一种基于循环队列的消息推送量统计装置,用于支持上述任意一个实施例或其组合所提供的基于循环队列的消息推送量统计方法。图3示出了根据本发明一实施例的基于循环队列的消息推送量统计装置的结构示意图。参见图3,该装置至少可以包括:循环队列创建模块310、消息数据取出模块320、计数时间判断模块330、消息数据更新模块340、消息过期处理模块350和轮询结束执行模块360。
现介绍本发明实施例的基于循环队列的消息推送量统计装置的各组成或器件的功能以及各部分间的连接关系:
循环队列创建模块310,适于创建一循环队列,并设置循环队列的首次轮询开始时间和轮询,其中,每推送一条消息,则将该消息的消息数据从循环队列的队尾插入循环队列中;消息数据包括消息唯一标识、计数时间、发送总量和有效时间;计数时间的初始值设为从该消息被推送至下一次轮询开始时间范围内的任一时刻,发送总量的初始值设为0。
消息数据取出模块320,与循环队列创建模块310连接,适于从循环队列的队头取出一消息数据。
计数时间判断模块330,与消息数据取出模块320连接,适于判断当前取出的消息数据中的计数时间是否大于本次轮询开始时间。
消息数据更新模块340,与计数时间判断模块330连接,适于若当前取出的消息数据中的计数时间小于或等于本次轮询开始时间,则根据该消息数据中的消息唯一标识获取该消息的当前发送总量,并根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据消息唯一标识将发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间。
消息过期处理模块350,与消息数据更新模块340连接,适于根据该消息数据中的有效时间判断该消息是否已过期;若是,则丢弃该消息数据,若否,则将更新后的消息数据从循环队列的队尾重新插入循环队列中。
轮询结束执行模块360,与计数时间判断模块330连接,适于若当前取出的消息数据中的计数时间大于本次轮询开始时间,则将该消息数据从循环队列的队尾重新插入循环队列中,退出本次轮询,直到下一次轮询开始时间到达。
其中,当每次轮询开始时间到达时,消息数据取出模块320、计数时间判断模块330、消息数据更新模块340、消息过期处理模块350和轮询结束执行模块360重复执行各自步骤,直到退出本次轮询。
在本发明的可选实施例中,消息数据更新模块340还适于:
比较所获取的该消息的当前发送总量是否大于该消息数据中记录的发送总量;
若所获取的该消息的当前发送总量大于该消息数据中记录的发送总量,则计算所获取的该消息的当前发送总量与该消息数据中记录的发送总量的差值,作为该消息的发送增长量,根据消息唯一标识将发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间;
若所获取的该消息的当前发送总量小于或等于该消息数据中记录的发送总量,则将该消息数据中的计数时间更新为下一次轮询开始时间。
在本发明的可选实施例中,消息过期处理模块350还适于:
比较该消息数据中的有效时间是否小于或等于本次轮询开始时间;
若是,则判断该消息已过期,否则,判断该消息未过期。
根据本发明的另一可选实施例中,循环队列中的消息数据还包括应发送的设备数量。相应地,如图4所示,图3中展示的基于循环队列的消息推送量统计装置还可以包括:
推送方式确定模块470,与消息数据更新模块340连接,适于在消息数据更新模块470根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据消息唯一标识将发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间之后,确定该消息的推送方式。
推送方式处理模块480,与推送方式确定模块470和消息过期处理模块350连接,适于若该消息的推送方式为单播或多播,则判断所获取的该消息的当前发送总量是否等于应发送的设备数量,若是,则丢弃该消息数据,若否,则触发消息过期处理模块350;若该消息的推送方式为广播,则直接触发消息过期处理模块350。
在本发明的可选实施例中,循环队列中的消息数据还包括发送类型。此时,推送方式确定模块470还适于:
根据该消息数据中记录的发送类型确定该消息的推送方式。
在本发明的可选实施例中,应发送的设备数量可以通过如下方式得到:
获取该消息被推送时的用户列表,并对该用户列表中的用户数量进行计数。
在本发明的可选实施例中,循环队列中的消息数据还包括到达总量,并且到达总量的初始值设为0。
相应地,消息数据更新模块340还适于:
在计数时间判断模块330判断出当前取出的消息数据中的计数时间小于或等于本次轮询开始时间之后,根据该消息数据中的消息唯一标识获取该消息的当前到达总量;
根据所获取的该消息的当前到达总量和该消息数据中记录的到达总量的比较结果,计算所获取的该消息的当前到达总量与该消息数据中记录的到达总量的差值,作为该消息的到达增长量,根据消息唯一标识将该消息的到达增长量存入指定数据库中,并将该消息数据中的到达总量更新为所获取的该消息的当前到达总量。
在本发明的可选实施例中,上文提及的循环队列是redis循环队列。
在本发明的可选实施例中,上文提及的指定数据库是MySQL数据库。
基于同一发明构思,本发明实施例还提供了一种计算机存储介质。该计算机存储介质存储有计算机程序代码,当该计算机程序代码在计算设备上运行时,导致计算设备执行根据上述任意一个实施例或其组合所述的基于循环队列的消息推送量统计方法。
基于同一发明构思,本发明实施例还提供了一种计算设备。该计算设备可以包括:
处理器;以及
存储有计算机程序代码的存储器;
当该计算机程序代码被处理器运行时,导致该计算设备执行根据上述任意一个实施例或其组合所述的基于循环队列的消息推送量统计方法。
根据上述任意一个可选实施例或多个可选实施例的组合,本发明实施例能够达到如下有益效果:
本发明实施例提出的基于循环队列的消息推送量统计方法和装置,首先创建循环队列,每推送一条消息,则将被推送消息的消息数据从队尾插入循环队列中,并将消息数据中计数时间的初始值设为从该消息被推送至下一次轮询开始时间范围内的任一时刻,发送总量的初始值设为0。当每次轮询开始时间到达时,重复执行以下步骤:从循环队列的队头取出消息数据;若取出的消息数据中的计数时间小于或等于本次轮询开始时间,则获取消息的当前发送总量,根据获取的当前发送总量和消息数据中记录的发送总量,计算消息的发送增长量并存入数据库,将消息数据中的发送总量更新为所获取的当前发送总量,并将消息数据中的计数时间更新为下一次轮询开始时间,然后,若取出的消息数据对应的消息已过期,则丢弃该消息数据,否则,将更新后的消息数据从队尾重新插入循环队列中;若取出的消息数据中的计数时间大于本次轮询开始时间,则表明在本次轮询中循环队列中的所有数据都已经轮询了一遍,此时,将取出的消息数据从队尾重新插入循环队列中,退出本次轮询,直到下一次轮询开始时间到达。本发明通过将被推送的消息的数据插入循环队列中,周期性地轮询循环队列中的每一条消息数据,获取每一消息的发送量并进行相关数学计算,得到每一消息的各时间段的推送量,并将过期的消息的数据丢弃,保证循环队列中的消息均在有效期内,避免了从数据库查询未过期的所有消息的步骤,大大减少了数据库的查询工作量,降低了数据库的工作压力,并显著提升了推送量统计的更新速度,从而适用于千万级数据量的统计。
进一步,对于单播或多播推送方式的消息,还比较所获取的消息的当前发送总量和消息的应发送的设备数量。若消息的当前发送总量等于消息的应发送的设备数量,则说明该消息已经被送达所有应推送的用户,后续无需再轮询该消息。此时,丢弃该消息的数据,使其不再进入循环队列进行轮询,进一步减少了无用的查询和计算,提升推送量统计的更新速度。
所属领域的技术人员可以清楚地了解到,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,为简洁起见,在此不另赘述。
另外,在本发明各个实施例中的各功能单元可以物理上相互独立,也可以两个或两个以上功能单元集成在一起,还可以全部功能单元都集成在一个处理单元中。上述集成的功能单元既可以采用硬件的形式实现,也可以采用软件或者固件的形式实现。
本领域普通技术人员可以理解:所述集成的功能单元如果以软件的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,其包括若干指令,用以使得一台计算设备(例如个人计算机,服务器,或者网络设备等)在运行所述指令时执行本发明各实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM)、随机存取存储器(RAM),磁碟或者光盘等各种可以存储程序代码的介质。
或者,实现前述方法实施例的全部或部分步骤可以通过程序指令相关的硬件(诸如个人计算机,服务器,或者网络设备等的计算设备)来完成,所述程序指令可以存储于一计算机可读取存储介质中,当所述程序指令被计算设备的处理器执行时,所述计算设备执行本发明各实施例所述方法的全部或部分步骤。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:在本发明的精神和原则之内,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案脱离本发明的保护范围。
根据本发明实施例的一方面,提供了A1.一种基于循环队列的消息推送量统计方法,包括:
创建一循环队列,并设置所述循环队列的首次轮询开始时间和轮询周期,其中,每推送一条消息,则将所述消息的消息数据从所述循环队列的队尾插入所述循环队列中;所述消息数据包括消息唯一标识、计数时间、发送总量和有效时间;所述计数时间的初始值设为从所述消息被推送至下一次轮询开始时间范围内的任一时刻,所述发送总量的初始值设为0;
当每次轮询开始时间到达时,重复进行如下步骤:
从所述循环队列的队头取出一消息数据;
判断当前取出的消息数据中的计数时间是否大于本次轮询开始时间;
若当前取出的消息数据中的计数时间小于或等于本次轮询开始时间,则根据该消息数据中的消息唯一标识获取该消息的当前发送总量,并根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间;
根据该消息数据中的有效时间判断该消息是否已过期;若是,则丢弃该消息数据,若否,则将更新后的消息数据从所述循环队列的队尾重新插入所述循环队列中;
若当前取出的消息数据中的计数时间大于本次轮询开始时间,则将该消息数据从所述循环队列的队尾重新插入所述循环队列中,退出本次轮询,直到下一次轮询开始时间到达。
A2.根据A1所述的方法,其中,根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间,包括:
比较所获取的该消息的当前发送总量是否大于该消息数据中记录的发送总量;
若所获取的该消息的当前发送总量大于该消息数据中记录的发送总量,则计算所获取的该消息的当前发送总量与该消息数据中记录的发送总量的差值,作为该消息的发送增长量,根据所述消息唯一标识将所述发送增长量存入所述指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间;
若所获取的该消息的当前发送总量小于或等于该消息数据中记录的发送总量,则将该消息数据中的计数时间更新为下一次轮询开始时间。
A3.根据A1或A2所述的方法,其中,根据该消息数据中的有效时间判断该消息是否已过期,包括:
比较该消息数据中的有效时间是否小于或等于本次轮询开始时间;
若是,则判断该消息已过期,否则,判断该消息未过期。
A4.根据A1-A3中任一项所述的方法,其中,所述消息数据还包括应发送的设备数量;
在根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间之后,所述方法还包括:
确定该消息的推送方式;
若该消息的推送方式为单播或多播,则判断所获取的该消息的当前发送总量是否等于所述应发送的设备数量,若是,则丢弃该消息数据,若否,则进行根据该消息数据中的有效时间判断该消息是否已过期的步骤;
若该消息的推送方式为广播,则直接进行根据该消息数据中的有效时间判断该消息是否已过期的步骤。
A5.根据A4所述的方法,其中,所述消息数据还包括发送类型;
确定该消息的推送方式,包括:
根据该消息数据中记录的发送类型确定该消息的推送方式。
A6.根据A4或A5所述的方法,其中,所述应发送的设备数量通过如下方式得到:
获取该消息被推送时的用户列表;
对所述用户列表中的用户数量进行计数。
A7.根据A1-A6中任一项所述的方法,其中,所述消息数据还包括到达总量,所述到达总量的初始值设为0;
在判断出当前取出的消息数据中的计数时间小于或等于本次轮询开始时间之后,所述方法还包括:
根据该消息数据中的消息唯一标识获取该消息的当前到达总量;
根据所获取的该消息的当前到达总量和该消息数据中记录的到达总量的比较结果,计算该消息的当前到达总量与该消息数据中记录的到达总量的差值,作为该消息的到达增长量,根据所述消息唯一标识将该消息的到达增长量存入所述指定数据库中,并将该消息数据中的到达总量更新为所获取的该消息的当前到达总量。
A8.根据A1-A7中任一项所述的方法,其中,所述循环队列是redis循环队列。
A9.根据A1-A8中任一项所述的方法,其中,所述指定数据库是MySQL数据库。
根据本发明实施例的另一方面,还提供了B10.一种基于循环队列的消息推送量统计装置,包括:
循环队列创建模块,适于创建一循环队列,并设置所述循环队列的首次轮询开始时间和轮询周期,其中,每推送一条消息,则将所述消息的消息数据从所述循环队列的队尾插入所述循环队列中;所述消息数据包括消息唯一标识、计数时间、发送总量和有效时间;所述计数时间的初始值设为从所述消息被推送至下一次轮询开始时间范围内的任一时刻,所述发送总量的初始值设为0;
消息数据取出模块,适于从所述循环队列的队头取出一消息数据;
计数时间判断模块,适于判断当前取出的消息数据中的计数时间是否大于本次轮询开始时间;
消息数据更新模块,适于若当前取出的消息数据中的计数时间小于或等于本次轮询开始时间,则根据该消息数据中的消息唯一标识获取该消息的当前发送总量,并根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间;
消息过期处理模块,适于根据该消息数据中的有效时间判断该消息是否已过期;若是,则丢弃该消息数据,若否,则将更新后的消息数据从所述循环队列的队尾重新插入所述循环队列中;以及
轮询结束执行模块,适于若当前取出的消息数据中的计数时间大于本次轮询开始时间,则将该消息数据从所述循环队列的队尾重新插入所述循环队列中,退出本次轮询,直到下一次轮询开始时间到达;
其中,当每次轮询开始时间到达时,所述消息数据取出模块、所述计数时间判断模块、所述消息数据更新模块、所述消息过期处理模块和所述轮询结束执行模块重复执行各自步骤,直到退出本次轮询。
B11.根据B10所述的装置,其中,所述消息数据更新模块还适于:
比较所获取的该消息的当前发送总量是否大于该消息数据中记录的发送总量;
若所获取的该消息的当前发送总量大于该消息数据中记录的发送总量,则计算所获取的该消息的当前发送总量与该消息数据中记录的发送总量的差值,作为该消息的发送增长量,根据所述消息唯一标识将所述发送增长量和存入所述指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间;
若所获取的该消息的当前发送总量小于或等于该消息数据中记录的发送总量,则将该消息数据中的计数时间更新为下一次轮询开始时间。
B12.根据B10或B11所述的装置,其中,所述消息过期处理模块还适于:
比较该消息数据中的有效时间是否小于或等于本次轮询开始时间;
若是,则判断该消息已过期,否则,判断该消息未过期。
B13.根据B10-B12中任一项所述的装置,其中,所述消息数据还包括应发送的设备数量;
所述装置还包括:
推送方式确定模块,适于在所述消息数据更新模块根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间之后,确定该消息的推送方式;
推送方式处理模块,适于若该消息的推送方式为单播或多播,则判断所获取的该消息的当前发送总量是否等于所述应发送的设备数量,若是,则丢弃该消息数据,若否,则触发所述消息过期处理模块;
若该消息的推送方式为广播,则直接触发所述消息过期处理模块。
B14.根据B13所述的装置,其中,所述消息数据还包括发送类型;
所述推送方式确定模块还适于:
根据该消息数据中记录的发送类型确定该消息的推送方式。
B15.根据B13或B14所述的装置,其中,所述应发送的设备数量通过如下方式得到:
获取该消息被推送时的用户列表;
对所述用户列表中的用户数量进行计数。
B16.根据B10-B15中任一项所述的装置,其中,所述消息数据还包括到达总量,所述到达总量的初始值设为0;
所述消息数据更新模块还适于:
在所述计数时间判断模块判断出当前取出的消息数据中的计数时间小于或等于本次轮询开始时间之后,根据该消息数据中的消息唯一标识获取该消息的当前到达总量;
根据所获取的该消息的当前到达总量和该消息数据中记录的到达总量的比较结果,计算该消息的当前到达总量与该消息数据中记录的到达总量的差值,作为该消息的到达增长量,根据所述消息唯一标识将该消息的到达增长量存入所述指定数据库中,并将该消息数据中的到达总量更新为所获取的该消息的当前到达总量。
B17.根据B10-B16中任一项所述的装置,其中,所述循环队列是redis循环队列。
B18.根据B10-B17中任一项所述的装置,其中,所述指定数据库是MySQL数据库。
根据本发明实施例的又一方面,还提供了C19.一种计算机存储介质,所述计算机存储介质存储有计算机程序代码,当所述计算机程序代码在计算设备上运行时,导致所述计算设备执行根据A1-A9中任一项所述的基于循环队列的消息推送量统计方法。
根据本发明实施例的再一方面,还提供了D20.一种计算设备,包括:
处理器;以及
存储有计算机程序代码的存储器;
当所述计算机程序代码被所述处理器运行时,导致所述计算设备执行根据A1-A9中任一项所述的基于循环队列的消息推送量统计方法。
Claims (10)
1.一种基于循环队列的消息推送量统计方法,包括:
创建一循环队列,并设置所述循环队列的首次轮询开始时间和轮询周期,其中,每推送一条消息,则将所述消息的消息数据从所述循环队列的队尾插入所述循环队列中;所述消息数据包括消息唯一标识、计数时间、发送总量和有效时间;所述计数时间的初始值设为从所述消息被推送至下一次轮询开始时间范围内的任一时刻,所述发送总量的初始值设为0;
当每次轮询开始时间到达时,重复进行如下步骤:
从所述循环队列的队头取出一消息数据;
判断当前取出的消息数据中的计数时间是否大于本次轮询开始时间;
若当前取出的消息数据中的计数时间小于或等于本次轮询开始时间,则根据该消息数据中的消息唯一标识获取该消息的当前发送总量,并根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间;
根据该消息数据中的有效时间判断该消息是否已过期;若是,则丢弃该消息数据,若否,则将更新后的消息数据从所述循环队列的队尾重新插入所述循环队列中;
若当前取出的消息数据中的计数时间大于本次轮询开始时间,则将该消息数据从所述循环队列的队尾重新插入所述循环队列中,退出本次轮询,直到下一次轮询开始时间到达。
2.根据权利要求1所述的方法,其中,根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间,包括:
比较所获取的该消息的当前发送总量是否大于该消息数据中记录的发送总量;
若所获取的该消息的当前发送总量大于该消息数据中记录的发送总量,则计算所获取的该消息的当前发送总量与该消息数据中记录的发送总量的差值,作为该消息的发送增长量,根据所述消息唯一标识将所述发送增长量存入所述指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间;
若所获取的该消息的当前发送总量小于或等于该消息数据中记录的发送总量,则将该消息数据中的计数时间更新为下一次轮询开始时间。
3.根据权利要求1或2所述的方法,其中,根据该消息数据中的有效时间判断该消息是否已过期,包括:
比较该消息数据中的有效时间是否小于或等于本次轮询开始时间;
若是,则判断该消息已过期,否则,判断该消息未过期。
4.根据权利要求1-3中任一项所述的方法,其中,所述消息数据还包括应发送的设备数量;
在根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间之后,所述方法还包括:
确定该消息的推送方式;
若该消息的推送方式为单播或多播,则判断所获取的该消息的当前发送总量是否等于所述应发送的设备数量,若是,则丢弃该消息数据,若否,则进行根据该消息数据中的有效时间判断该消息是否已过期的步骤;
若该消息的推送方式为广播,则直接进行根据该消息数据中的有效时间判断该消息是否已过期的步骤。
5.根据权利要求4所述的方法,其中,所述消息数据还包括发送类型;
确定该消息的推送方式,包括:
根据该消息数据中记录的发送类型确定该消息的推送方式。
6.根据权利要求4或5所述的方法,其中,所述应发送的设备数量通过如下方式得到:
获取该消息被推送时的用户列表;
对所述用户列表中的用户数量进行计数。
7.根据权利要求1-6中任一项所述的方法,其中,所述消息数据还包括到达总量,所述到达总量的初始值设为0;
在判断出当前取出的消息数据中的计数时间小于或等于本次轮询开始时间之后,所述方法还包括:
根据该消息数据中的消息唯一标识获取该消息的当前到达总量;
根据所获取的该消息的当前到达总量和该消息数据中记录的到达总量的比较结果,计算该消息的当前到达总量与该消息数据中记录的到达总量的差值,作为该消息的到达增长量,根据所述消息唯一标识将该消息的到达增长量存入所述指定数据库中,并将该消息数据中的到达总量更新为所获取的该消息的当前到达总量。
8.一种基于循环队列的消息推送量统计装置,包括:
循环队列创建模块,适于创建一循环队列,并设置所述循环队列的首次轮询开始时间和轮询周期,其中,每推送一条消息,则将所述消息的消息数据从所述循环队列的队尾插入所述循环队列中;所述消息数据包括消息唯一标识、计数时间、发送总量和有效时间;所述计数时间的初始值设为从所述消息被推送至下一次轮询开始时间范围内的任一时刻,所述发送总量的初始值设为0;
消息数据取出模块,适于从所述循环队列的队头取出一消息数据;
计数时间判断模块,适于判断当前取出的消息数据中的计数时间是否大于本次轮询开始时间;
消息数据更新模块,适于若当前取出的消息数据中的计数时间小于或等于本次轮询开始时间,则根据该消息数据中的消息唯一标识获取该消息的当前发送总量,并根据所获取的该消息的当前发送总量和该消息数据中记录的发送总量的比较结果,计算该消息的当前发送总量与该消息数据中记录的发送总量的差值作为发送增长量,根据所述消息唯一标识将所述发送增长量存入指定数据库中,将该消息数据中的发送总量更新为所获取的该消息的当前发送总量,并将该消息数据中的计数时间更新为下一次轮询开始时间;
消息过期处理模块,适于根据该消息数据中的有效时间判断该消息是否已过期;若是,则丢弃该消息数据,若否,则将更新后的消息数据从所述循环队列的队尾重新插入所述循环队列中;以及
轮询结束执行模块,适于若当前取出的消息数据中的计数时间大于本次轮询开始时间,则将该消息数据从所述循环队列的队尾重新插入所述循环队列中,退出本次轮询,直到下一次轮询开始时间到达;
其中,当每次轮询开始时间到达时,所述消息数据取出模块、所述计数时间判断模块、所述消息数据更新模块、所述消息过期处理模块和所述轮询结束执行模块重复执行各自步骤,直到退出本次轮询。
9.一种计算机存储介质,所述计算机存储介质存储有计算机程序代码,当所述计算机程序代码在计算设备上运行时,导致所述计算设备执行根据权利要求1-7中任一项所述的基于循环队列的消息推送量统计方法。
10.一种计算设备,包括:
处理器;以及
存储有计算机程序代码的存储器;
当所述计算机程序代码被所述处理器运行时,导致所述计算设备执行根据权利要求1-7中任一项所述的基于循环队列的消息推送量统计方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810961358.9A CN108965032B (zh) | 2018-08-22 | 2018-08-22 | 一种基于循环队列的消息推送量统计方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810961358.9A CN108965032B (zh) | 2018-08-22 | 2018-08-22 | 一种基于循环队列的消息推送量统计方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108965032A true CN108965032A (zh) | 2018-12-07 |
CN108965032B CN108965032B (zh) | 2022-07-01 |
Family
ID=64473803
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810961358.9A Active CN108965032B (zh) | 2018-08-22 | 2018-08-22 | 一种基于循环队列的消息推送量统计方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108965032B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110336849A (zh) * | 2019-04-25 | 2019-10-15 | 郑州时空隧道信息技术有限公司 | 信息推送方法、信息推送装置及终端 |
CN110727666A (zh) * | 2019-09-25 | 2020-01-24 | 中冶赛迪重庆信息技术有限公司 | 面向工业互联网平台的缓存组件、方法、设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120170528A1 (en) * | 2011-01-05 | 2012-07-05 | Samsung Electronics Co. Ltd. | Method for polling a message in an instant messenger and a mobile device adapted to the method |
CN106161593A (zh) * | 2016-06-21 | 2016-11-23 | 北京奇虎科技有限公司 | 消息轮询方法和服务器、通信系统 |
CN106940710A (zh) * | 2017-02-27 | 2017-07-11 | 广东欧珀移动通信有限公司 | 信息推送方法及装置 |
WO2018036007A1 (zh) * | 2016-08-25 | 2018-03-01 | 北京智芯微电子科技有限公司 | 网络数据接收的处理方法及装置、存储介质 |
CN108388479A (zh) * | 2018-02-10 | 2018-08-10 | 深圳壹账通智能科技有限公司 | 延迟消息推送方法、装置、计算机设备及存储介质 |
-
2018
- 2018-08-22 CN CN201810961358.9A patent/CN108965032B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120170528A1 (en) * | 2011-01-05 | 2012-07-05 | Samsung Electronics Co. Ltd. | Method for polling a message in an instant messenger and a mobile device adapted to the method |
CN106161593A (zh) * | 2016-06-21 | 2016-11-23 | 北京奇虎科技有限公司 | 消息轮询方法和服务器、通信系统 |
WO2018036007A1 (zh) * | 2016-08-25 | 2018-03-01 | 北京智芯微电子科技有限公司 | 网络数据接收的处理方法及装置、存储介质 |
CN106940710A (zh) * | 2017-02-27 | 2017-07-11 | 广东欧珀移动通信有限公司 | 信息推送方法及装置 |
CN108388479A (zh) * | 2018-02-10 | 2018-08-10 | 深圳壹账通智能科技有限公司 | 延迟消息推送方法、装置、计算机设备及存储介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110336849A (zh) * | 2019-04-25 | 2019-10-15 | 郑州时空隧道信息技术有限公司 | 信息推送方法、信息推送装置及终端 |
CN110727666A (zh) * | 2019-09-25 | 2020-01-24 | 中冶赛迪重庆信息技术有限公司 | 面向工业互联网平台的缓存组件、方法、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108965032B (zh) | 2022-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20100131543A1 (en) | Implementation of stream algebra over class instances | |
US9070139B2 (en) | Estimating unique impressions in an online video distribution system | |
CN107038162B (zh) | 基于数据库日志的实时数据查询方法和系统 | |
CN108965032A (zh) | 一种基于循环队列的消息推送量统计方法和装置 | |
WO2015153236A2 (en) | Measuring latency in an interactive application | |
EP1401181A1 (en) | Method and apparatus for integrating data aggregation of historical data and real-time deliverable metrics in a database reporting environment | |
CN115004210A (zh) | 用户画像列表构建方法、装置、服务器以及存储介质 | |
CN108429800A (zh) | 一种移动设备 | |
CN111177201B (zh) | 一种数据流处理的方法以及相关装置 | |
US9531827B1 (en) | Push notification delivery system with feedback analysis | |
CN106101022B (zh) | 一种数据请求处理方法和系统 | |
Heintz et al. | Optimizing timeliness and cost in geo-distributed streaming analytics | |
Gal et al. | Managing periodically updated data in relational databases: A stochastic modeling approach | |
CN113645310A (zh) | 一种数据限流方法、装置、电子设备及可读存储介质 | |
WO2023109806A1 (zh) | 物联网设备的活跃数据处理方法、装置及存储介质 | |
CN113095875A (zh) | 一种消息投放效果统计方法及相关装置 | |
CN107423999B (zh) | 一种基于用户分组的定向下发广告方法及系统 | |
Bright et al. | Adaptive pull-based policies for wide area data delivery | |
CN114661823A (zh) | 数据同步的方法、装置、电子设备及可读存储介质 | |
CN107295059B (zh) | 业务推送量的统计系统及方法 | |
CN110580307B (zh) | 一种快速统计的处理方法及装置 | |
CN109510859A (zh) | 一种推送消息的到达量的统计方法和装置 | |
CN107196818A (zh) | 一种Linux集群监控的系统及方法 | |
KR101968575B1 (ko) | 실시간 병목 자동 분석 방법 및 이러한 방법을 수행하는 장치 | |
CN110489460B (zh) | 一种快速统计的优化方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |