一种消息推送方法、装置、电子设备及介质与流程

文档序号:18406750发布日期:2019-08-10 00:28阅读:118来源:国知局
一种消息推送方法、装置、电子设备及介质与流程

本发明涉及数据传输技术领域,特别是涉及一种消息推送方法、装置、电子设备及介质。



背景技术:

为了提高用户粘度、增强用户活跃性或提高公司收益等,公司可通过消息推送平台向一些用户设备推送消息。现有的消息推送方法一般为通过用户设备获取用户的位置、喜好和习惯等信息,然后根据这些信息选择一部分需要进行消息推送的用户设备,向这些用户设备推送消息。例如:台风正在登陆广东省,可以为地理位置为广东省的用户设备推送台风预警消息。

但是在需要推送一个消息时,服务器可根据多种特征选择被推送的用户设备,可能会导致同一个用户设备被发送多个相同的推送消息。例如:在推送“冰雪奇缘”电影的推广消息时,需要选择喜欢看动漫的用户,也需要选择喜欢看英文电影的用户,而有些用户可能既喜欢看动漫又喜欢看英文电影,那么这些用户就被选择了两次,会被推送两个相同的“冰雪奇缘”电影的推广消息。



技术实现要素:

本发明实施例的目的在于提供一种消息推送方法、装置、电子设备及介质,以实现避免在消息推送时,多次为同一个用户推送相同的消息。具体技术方案如下:

第一方面,提供了一种消息推送方法,所述方法包括:

判断待推送消息对应的待推送终端总数是否大于预设阈值,若是,则对所述待推送消息对应的待推送终端进行分组;

根据所述待推送终端的分组数,生成存储位的集合,其中,所述集合中行数与所述待推送终端的分组数相同,或所述集合中列数与所述待推送终端的分组数相同,所述存储位用于记录待推送终端的推送状态的推送标志;

针对每一所述待推送终端,均执行下述步骤:

利用预设的哈希函数,计算所述待推送终端的身份标识(identity,id)的哈希值,根据所述待推送终端的id的哈希值,确定所述待推送终端的id映射的存储位,并从确定的存储位中获取待推送终端的推送标志;

根据所获取的推送标志,确定所述待推送终端是否未被推送所述待推送消息,若是,则向所述待推送终端推送所述待推送消息,以及更新所述待推送终端的id映射的存储位记录的推送标志。

可选的,所述存储位的集合为位图(bitmap)的集合,其中,所述bitmap中包括用于记录待推送终端的推送状态的推送标志的存储位,且所述bitmap的集合中的bitmap总个数与所述待推送终端的分组数相同;

所述对所述待推送消息对应的待推送终端进行分组的步骤,包括:

根据所述待推送消息对应的待推送终端总数和单个bitmap中实际存储位数,确定所述待推送终端的分组数;根据所述待推送终端的分组数,对待推送消息对应的待推送终端进行分组;

所述根据所述待推送终端的分组数,生成存储位的集合的步骤,包括:

确定所述待推送终端的分组数为bitmap的总个数;

根据所述单个bitmap中实际存储位数和期望误差率,确定单个bitmap的期望存储位数,所述期望误差率为允许bitmap中记录的推送标志出现错误的概率;

根据所述单个bitmap的期望存储位数和所述bitmap的总个数,生成存储位的集合。

可选的,所述利用预设的哈希函数,计算所述待推送终端的身份标识id的哈希值,根据所述待推送终端的id的哈希值,确定所述待推送终端的id映射的存储位,并从确定的存储位中获取待推送终端的推送标志的步骤,包括:

利用预设的第一哈希函数,计算所述待推送终端的身份标识id的第一哈希值;根据所述待推送终端的id的第一哈希值和所述待推送终端的分组数,确定待推送终端的id映射的目标bitmap;

利用预设的第二哈希函数,计算所述待推送终端的id的第二哈希值;根据所述待推送终端的id的第二哈希值和所述单个bitmap的期望存储位数,确定在所述目标bitmap中,待推送终端的id映射的目标存储位;

从所述目标存储位中读取待推送终端的推送标志。

可选的,所述存储位记录的初始推送状态均为未推送;

所述根据所获取的推送标志,确定所述待推送终端是否未被推送所述待推送消息的步骤,包括:

若所获取的待推送终端的推送标志不全为已推送,则确定所述待推送终端未被推送所述待推送消息。

可选的,所述向所述待推送终端推送所述待推送消息,以及更新所述待推送终端的id映射的存储位记录的推送标志的步骤,包括:

向待推送终端推送所述待推送消息,并判断向待推送终端推送的所述待推送消息是否推送成功;

若向待推送终端推送的所述待推送消息推送成功,则将所述待推送终端的id映射的目标存储位记录的推送标志更新为已推送。

第二方面,提供了一种消息推送装置,所述装置包括:

分组模块,用于判断待推送消息对应的待推送终端总数是否大于预设阈值,在所述待推送消息对应的待推送终端总数大于预设阈值时,对所述待推送消息对应的待推送终端进行分组;

生成模块,用于根据所述待推送终端的分组数,生成存储位的集合,其中,所述集合中行数与所述待推送终端的分组数相同,或所述集合中列数与所述待推送终端的分组数相同,所述存储位用于记录待推送终端的推送状态的推送标志;

推送模块,用于针对每一所述待推送终端,利用预设的哈希函数,计算所述待推送终端的身份标识id的哈希值,根据所述待推送终端的id的哈希值,确定所述待推送终端的id映射的存储位,并从确定的存储位中获取待推送终端的推送标志;根据所获取的推送标志,确定所述待推送终端是否未被推送所述待推送消息,在所述待推送终端未被推送所述待推送消息时,向所述待推送终端推送所述待推送消息,以及更新所述待推送终端的id映射的存储位记录的推送标志。

可选的,所述存储位的集合为位图bitmap的集合,其中,所述bitmap中包括用于记录待推送终端的推送状态的推送标志的存储位,且所述bitmap的集合中的bitmap总个数与所述待推送终端的分组数相同;

所述分组模块,具体用于:

根据所述待推送消息对应的待推送终端总数和单个bitmap中实际存储位数,确定所述待推送终端的分组数;根据所述待推送终端的分组数,对待推送消息对应的待推送终端进行分组;

所述生成模块,具体用于:

确定所述待推送终端的分组数为bitmap的总个数;

根据所述单个bitmap中实际存储位数和期望误差率,确定单个bitmap的期望存储位数,所述期望误差率为允许bitmap中记录的推送标志出现错误的概率;

根据所述单个bitmap的期望存储位数和所述bitmap的总个数,生成存储位的集合。

可选的,所述推送模块,具体用于:

利用预设的第一哈希函数,计算所述待推送终端的身份标识id的第一哈希值;根据所述待推送终端的id的第一哈希值和所述待推送终端的分组数,确定待推送终端的id映射的目标bitmap;

利用预设的第二哈希函数,计算所述待推送终端的id的第二哈希值;根据所述待推送终端的id的第二哈希值和所述单个bitmap的期望存储位数,确定在所述目标bitmap中,待推送终端的id映射的目标存储位;

从所述目标存储位中读取待推送终端的推送标志。

可选的,所述存储位记录的初始推送状态均为未推送;

所述推送模块,具体用于:

在所获取的待推送终端的推送标志不全为已推送时,确定所述待推送终端未被推送所述待推送消息。

可选的,所述推送模块,具体用于:

向待推送终端推送所述待推送消息,并判断向待推送终端推送的所述待推送消息是否推送成功;

在向待推送终端推送的所述待推送消息推送成功时,将所述待推送终端的id映射的目标存储位记录的推送标志更新为已推送。

第三方面,提供了一种电子设备,所述电子设备包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现上述任一所述的消息推送方法步骤。

第四方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一所述的消息推送方法步骤。

第五方面,本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的消息推送方法步骤。

可见,应用本发明实施例提供的消息推送方法、装置、电子设备及介质,由于在给待推送消息对应的每个待推送终端推送待推送消息前,会根据待推送终端的身份标识(identity,id)的哈希值,获取待推送终端的id映射的存储位记录的推送标志。然后根据所获取的推送标志,确定待推送终端是否未被推送待推送消息,向未被推送待推送消息的待推送终端推送待推送消息,并更新待推送终端的id映射的存储位记录的推送标志,这样,就可以避免对已被推送待推送消息的待推送终端再次推送待推送消息的情况。

当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。

图1为本发明实施例提供的一种消息推送系统结构示意图;

图2为本发明实施例提供的一种消息推送方法流程图;

图3为本发明实施例提供的一种消息推送方法示例性示意图;

图4为本发明实施例提供的另一种消息推送方法流程图;

图5为本发明实施例提供的另一种消息推送方法示例性示意图;

图6为本发明实施例提供的另一种消息推送方法示例性示意图;

图7为本发明实施例提供的一种消息推送装置结构示意图;

图8为本发明实施例提供的一种电子设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。

本发明实施例提供的消息推送方法可以应用于图1所示的消息推送系统中,该系统包括:服务器和终端;终端可以与服务器通信,终端与服务器之间的连接可以为无线连接。图1中终端与服务器之间的连接以无线保真(wireless-fidelity,wifi)连接为例。

其中,本发明实施例中的终端可以为手机或平板电脑等能够接收服务器发送的消息的终端。终端包括接收模块,接收模块用于接收服务器发送的待推送消息。

服务器,包括分组模块、存储模块、过滤模块和推送模块。分组模块用于将待推送消息对应的待推送终端进行分组;存储模块用于存储每个待推送终端的推送标志;过滤模块用于过滤待推送消息对应的待推送终端中重复的终端;推送模块用于推送待推送消息。

其中,本发明实施例中的过滤模块可以部署在多个服务器中,例如:图1中把待推送消息对应的待推送终端分为三组,过滤每组待推送终端可以由三个服务器中的过滤模块并行执行。

在另一种实施方式中,分组模块、存储模块、过滤模块和推送模块可以分别部署在不同的服务器中以提高运行速度。

本发明实施例提供的一种消息推送方法,该方法包括如下步骤:

判断待推送消息对应的待推送终端总数是否大于预设阈值,若是,则对待推送消息对应的待推送终端进行分组;

根据待推送终端的分组数,生成存储位的集合,其中,存储位的集合中行数与待推送终端的分组数相同,或存储位的集合中列数与待推送终端的分组数相同,而且生成的存储位为用于记录待推送终端的推送状态的推送标志;

针对每一待推送终端,均执行下述步骤:

利用预设的哈希函数,计算该待推送终端的身份标识id的哈希值,根据该待推送终端的id的哈希值,确定该待推送终端的id映射的存储位,并从确定的存储位中获取该待推送终端的推送标志;

根据所获取的推送标志,确定该待推送终端是否未推送待推送消息,若是,则向该待推送终端推送待推送消息,以及更新待推送终端的id映射的存储位记录的推送标志。

结合图1,本发明实施例还提供了一种消息推送方法,该方法应用于服务器,如图2所示,该方法包括如下步骤:

步骤201,判断待推送消息对应的待推送终端总数是否大于预设阈值,若是,则对待推送消息对应的待推送终端进行分组。

在本发明实施例中,服务器可以通过终端获取用户的位置、喜好和习惯等信息,然后根据这些信息选择一部分需要进行消息推送的待推送终端。

一种实现方式中,可根据待推送消息对应的待推送终端总数x,与单个位图(bitmap)中实际存储位数t,通过公式(1)计算待推送终端的分组数n,然后将待推送消息对应的待推送终端分成n组。

其中,单个bitmap中实际存储位数t表示单个bitmap可以存储t个待推送终端的推送标志,推送标志表示待推送终端是否已被推送待推送消息,代表的运算为取上整数。例如:

示例性的,单个bitmap中实际存储位数t可以设置为1000000。

步骤202,根据待推送终端的分组数,生成bitmap的集合。

其中,bitmap的集合中行数与待推送终端的分组数相同,或bitmap的集合中列数与待推送终端的分组数相同,存储位用于记录待推送终端的推送状态的推送标志。

一种实施方式中,生成n个bitmap,且生成的每一bitmap中各存储位记录的初始推送标志均为未推送该待推送消息(n为待推送终端的分组数)。例如:生成的n个bitmap中各存储位记录的初始推送标志均为0。

步骤203,针对每一个待推送终端,利用预设的哈希函数,计算待推送终端的id的哈希值,根据待推送终端的id的哈希值,确定待推送终端的id映射的存储位,并从确定的存储位中获取待推送终端的推送标志。

其中,bitmap中存储了待推送终端的推送标志,推送标志表示的推送信息包括:已推送待推送消息或未推送待推送消息。

一种实施方式中,可以分别对每一个待推送终端,利用预设的第一哈希函数,确定待推送终端的id映射的目标bitmap。然后根据预设的第二哈希函数,确定在目标bitmap中,待推送终端的id映射的目标存储位,并从确定的目标存储位中读取推送标志。

步骤204,针对每一个待推送终端,根据获取的推送标志,确定待推送终端是否未被推送待推送消息,若是,则向待推送终端推送待推送消息,以及更新待推送终端的id映射的存储位记录的推送标志。

一种实施方式中,若从目标bitmap中的目标存储位读取的待推送终端的推送标志均为已推送,则确定待推送终端已被推送待推送消息。若从目标bitmap中的目标存储位读取的待推送终端的推送标志不全为已推送,则确定待推送终端未被推送待推送消息。若待推送终端未被推送待推送消息,则将待推送终端的id映射的目标存储位记录的推送标志均更新为已推送,并向待推送终端推送待推送消息。若待推送终端已被推送待推送消息,则不向该待推送终端推送待推送消息。

在本发明实施例中,可能存在一个存储位存储了多个待推送终端的推送标志的情况,所以只有在待推送终端的目标存储位记录的推送标志均为已推送时,才可以确定待推送终端已被推送待推送消息。

示例性的,可以设置推送标志为“1”表示已推送,推送标志为“0”表示未推送。

可选的,向未被推送待推送消息的待推送终端推送待推送消息的方式包括以下三种方式:

方式一、分别确定每个待推送终端是否未被推送待推送消息,若是,则更新待推送终端的id映射的存储位记录的推送标志。在确定了待推送消息对应的各个待推送终端是否未被推送待推送消息后,向未被推送待推送消息的待推送终端推送待推送消息。

方式二、分别确定每个待推送终端是否未被推送待推送消息,若是,则更新待推送终端的id映射的存储位记录的推送标志,然后向该待推送终端推送待推送消息。

方式三、分别确定每个待推送终端是否未被推送待推送消息,若是,则判断向待推送终端推送的待推送消息是否推送成功。若是,则将目标bitmap中的目标存储位记录的推送标志更新为已推送。

可以理解的是,若向待推送终端推送的待推送消息推送成功,则说明待推送终端接收到了待推送消息,需要更新推送标志。而向待推送终端推送的待推送消息推送失败,则说明待推送终端未接收到待推送消息,不需要更新推送标志。

可以理解的是,在确定待推送终端被未被推送待推送消息后,及时将待推送终端映射的目标存储位记录的推送标志均改为已推送,是为了避免相同的待推送终端再次读到该待推送终端的目标存储位记录的推送标志时,读取到的推送标志因未及时更新,而导致读取到了错误的推送标志,使得该待推送终端收到了重复的待推送消息。

可见,应用本发明实施例提供的消息推送方法,由于在给待推送消息对应的每个待推送终端推送待推送消息前,会根据待推送终端的id的哈希值,获取待推送终端的id映射的存储位记录的推送标志。然后根据所获取的推送标志,确定待推送终端是否未被推送待推送消息,向未被推送待推送消息的待推送终端推送待推送消息,并更新待推送终端的id映射的存储位记录的推送标志,这样,就可以避免对已被推送待推送消息的待推送终端再次推送待推送消息的情况。

可选的,结合图3,上述步骤202生成n个bitmap的方法为:根据公式(1),确定用于记录待推送终端的推送标志的bitmap总个数n,再根据公式(2),确定单个bitmap的期望存储位数m,然后根据bitmap总个数n初始化bitmap的数量,根据单个bitmap的期望存储位数m初始化每个bitmap的存储位数,生成存储位的集合。

其中,生成的bitmap中的各存储位记录的初始推送标志均为未推送。例如:将生成的bitmap中的各存储位记录的初始推送标志均设置为“0”。

一种实现方式中,通过公式(2)计算单个bitmap的期望存储位数m:

其中,单个bitmap的期望存储位数m表示单个bitmap可记录m个推送标志,单个bitmap中实际存储位数t表示单个bitmap可以存储t个待推送终端的推送标志,期望误差率p为允许bitmap中记录的推送标志出现错误的概率,示例性的,期望误差率p可以为0.01%。

在本发明实施例中,由于若将单个bitmap的期望存储位数设为t,则很有可能造成,同一个存储位存储了多个待推送终端的推送标志,导致推送标志被确定错误。例如:待推送终端a和待推送终端b的推送标志都记录在存储位1中,若待推送终端a已被推送待推送消息,则存储位1中记录的推送标志为已推送,若待推送终端b未被推送待推送消息,在查询待推送终端b的推送标志时读取到存储位1中的推送标志为已推送,导致待推送终端b的推送标志被确定错误。为了避免发生这一情况,可以通过增大单个bitmap的期望存储位数,使得每个待推送终端的推送标志尽量存储在不同的存储位中。

可见,与现有技术将待推送消息对应的待推送终端的推送标志都记录在一个bitmap中的方法相比,本发明实施例中,通过将待推送消息对应的待推送终端的推送标志分别记录在n个bitmap中,使得单个bitmap的期望存储位数m较小,使得在单个bitmap中查询或写入的时间减少,所以应用本发明实施例可以提高消息推送的速度。

在本发明实施例中,由于是在数据库(redis)中创建bitmap,而redis在执行程序时是单线程执行,所以可以避免从bitmap中同时查找相同的待推送终端的推送标志时,推送结果被确定错误的情况。例如:若待推送终端a未被推送过待推送消息,则待推送终端a的id在bitmap中映射的存储位1中的推送标志为未推送,当两个待推送终端a同时在存储位1中读取推送标志时,则先确定其中一个待推送终端a的推送标志,然后将待推送终端a的推送标志改为已推送。当查找另一个待推送终端a的推送标志时,则会将另一个待推送终端a确定为已推送待推送消息。

另外,本发明实施例还可以并行确定多个待推送消息各自对应的待推送终端的推送标志,此时,生成bitmap的方法为:根据待推送消息a、b和c分别对应的待推送终端总数,分别计算待推送消息a、b和c对应的bitmap总个数,再分别根据待推送消息a、b和c各自对应的bitmap总个数和单个bitmap期望的存储位数m,生成bitmap。并且,生成的bitmap中的各存储位记录的初始推送标志均为未推送。生成的bitmap参见表1:

表1

其中,a:0、a:1和a:2表示待推送消息a对应的待推送终端被分成三组,且创建了三个bitmap,用于记录待推送消息a对应的待推送终端的推送标志。同理,b:0表示待推送消息b对应待推送终端数量较少,所以未对待推送消息b对应的待推送终端进行分组,可以创建一个bitmap用于记录待推送消息b对应的待推送终端的推送标志。同理,c:0、c:1、c:2和c:3表示待推送消息c对应的待推送终端被分为四组,创建了四个bitmap,用于记录待推送消息c对应的待推送终端的推送标志。

可见,本发明实施例与现有技术将待推送消息对应的待推送终端都记录在一个bitmap中的方法相比,由于在本发明实施例中可以创建多个bitmap,而且每个bitmap都可以存放在不同的服务器中,这样,由于一个服务器中允许存放的bitmap的长度有限,所以现有技术可以过滤的待推送终端数有限,而本发明实施例可以用不同的服务器存储,每个服务器中可以存储一个或多个bitmap,使得应用本发实施例可以增大消息推送方法中可过滤的待推送终端的数量。

可选的,参见图4,上述步骤203读取推送标志的方法包括:

步骤401,利用预设的第一哈希函数,计算待推送终端的id的第一哈希值。

在本发明实施例中第一哈希函数可以为预设的哈希函数,待推送终端的id可以是该待推送终端第一次与服务器建立连接时,服务器对该待推送终端设置的编号。

步骤402,根据待推送终端的id的第一哈希值和待推送终端的分组数量,确定待推送终端的id映射的目标bitmap。

一种实现方式中,通过公式(3),计算待推送终端的id映射的目标bitmap:

rx=hash(id)%n(3)

其中,rx为第x个bitmap,hash(id)表示待推送终端的id的第一哈希值,%表示取余运算,n为待推送终端的分组数量。

步骤403,根据预设的第二哈希函数,计算待推送终端的id的第二哈希值。

其中,通过公式(4)计算待推送终端的id的第二哈希值的数量k:

其中,m为单个bitmap的期望存储位数,t为单个bitmap中实际存储位数。

在本发明实施例中,可以利用预设的k个不同的第二哈希函数,计算待推送终端的id的k个第二哈希值。

步骤404,根据待推送终端的id的第二的哈希值和单个bitmap的期望存储位数,确定在目标bitmap中,待推送终端的id映射的目标存储位。

一种实施方式中,通过公式(5)计算在目标bitmap中,待推送终端的id映射的目标存储位cy:

cy=fy(id)%m(5)

其中,cy为第y个存储位,fy(id)表示待推送终端的id的第二哈希值,%表示取余运算,m为单个bitmap的期望存储位数。

步骤405,从目标存储位中读取待推送终端的推送标志。

示例性的,参见图5,假设待推送终端a对应的目标bitmap为rx=3。在目标bitmap中,待推送终端a的id映射的3个的目标存储位cy=2或5或7,则待推送终端a在bitmap中映射的存储位为:第三个bitmap的第二、第五和第七个存储位,读出的推送标志分别为:“1”、“0”和“1”。

进一步的,在读取了待推送终端的推送标志后,若推送标志表示待推送终端未被推送待推送消息,则更新读取的推送标志。

示例性的,参见图6,根据图5中的描述,在目标bitmap中,待推送终端a的id映射的存储位为:第三个bitmap的第二、第五和第七个存储位。从图5中可以看出这三个存储位中记录的数值分别为:“1”、“0”和“1”,则确定待推送终端的推送标志不全为已推送,并将待推送终端a的id映射的上述三个存储位中的推送标志均更新为已推送,即均改为“1”,并给该待推送终端推送待推送消息。

可见,应用本发明实施例,可以在读取到待推送终端的推送标志后及时更新该推送标志,使得相同的待推送终端再次读取到对应的推送标志时,获得到的是更新后的推送标志,避免了因推送标志更新不及时而导致的待推送终端的推送标志被确定错误的情况。

对应于上述方法实施例,如图7所示,本发明实施例提供了一种消息推送装置,应用于服务器,该装置包括:分组模块701、生成模块702和推送模块703。

分组模块701,用于判断待推送消息对应的待推送终端总数是否大于预设阈值,在待推送消息对应的待推送终端总数大于预设阈值时,对待推送消息对应的待推送终端进行分组;

生成模块702,用于根据待推送终端的分组数,生成存储位的集合,其中,集合中行数与待推送终端的分组数相同,或集合中列数与待推送终端的分组数相同,存储位用于记录待推送终端的推送状态的推送标志;

推送模块703,用于针对每一待推送终端,利用预设的哈希函数,计算待推送终端的身份标识id的哈希值,根据待推送终端的id的哈希值,确定待推送终端的id映射的存储位,并从确定的存储位中获取待推送终端的推送标志;根据所获取的推送标志,确定待推送终端是否未被推送待推送消息,在所述待推送终端未被推送所述待推送消息时,向所述待推送终端推送所述待推送消息,以及更新待推送终端的id映射的存储位记录的推送标志。

可选的,存储位的集合为位图bitmap的集合,其中,bitmap中包括用于记录待推送终端的推送状态的推送标志的存储位,且bitmap的集合中的bitmap总个数与待推送终端的分组数相同;

分组模块701,可以具体用于:

根据待推送消息对应的待推送终端总数和单个bitmap中实际存储位数,确定待推送终端的分组数;根据待推送终端的分组数,对待推送消息对应的待推送终端进行分组;

生成模块702,可以具体用于:

确定待推送终端的分组数为bitmap的总个数;

根据单个bitmap中实际存储位数和期望误差率,确定单个bitmap的期望存储位数,期望误差率为允许bitmap中记录的推送标志出现错误的概率;

根据单个bitmap的期望存储位数和bitmap的总个数,生成存储位的集合。

可选的,推送模块703,可以具体用于:

利用预设的第一哈希函数,计算待推送终端的身份标识id的第一哈希值;根据待推送终端的id的第一哈希值和待推送终端的分组数,确定待推送终端的id映射的目标bitmap;

利用预设的第二哈希函数,计算待推送终端的id的第二哈希值;根据待推送终端的id的第二哈希值和单个bitmap的期望存储位数,确定在目标bitmap中,待推送终端的id映射的目标存储位;

从目标存储位中读取待推送终端的推送标志。

可选的,存储位记录的初始推送状态均为未推送;

推送模块703,可以具体用于:

在所获取的待推送终端的推送标志不全为已推送时,确定待推送终端未被推送待推送消息。

可选的,推送模块703,可以具体用于:

向待推送终端推送待推送消息,并判断向待推送终端推送的待推送消息是否推送成功;

在向待推送终端推送的待推送消息推送成功时,将待推送终端的id映射的目标存储位记录的推送标志更新为已推送。

本发明实施例还提供了一种电子设备,如图8所示,包括处理器801、通信接口802、存储器803和通信总线804,其中,处理器801,通信接口802,存储器803通过通信总线804完成相互间的通信,

存储器803,用于存放计算机程序;

处理器801,用于执行存储器803上所存放的程序时,实现上述方法实施例中由服务器执行的步骤。

上述电子设备提到的通信总线可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

通信接口用于上述电子设备与其他设备之间的通信。

存储器可以包括随机存取存储器(randomaccessmemory,ram),也可以包括非易失性存储器(non-volatilememory,nvm),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一消息推送方法的步骤。

在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一消息推送方法。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

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