一种计数方法、装置、计算机设备和存储介质与流程

文档序号:30950758发布日期:2022-07-30 07:26阅读:119来源:国知局
一种计数方法、装置、计算机设备和存储介质与流程

1.本公开涉及计算机技术领域,具体而言,涉及一种计数方法、装置、计算机设备和存储介质。


背景技术:

2.在各种业务场景中,往往存在大量的场景数据,为了便于对数据进行快速读取,通常利用分布式的远程字典服务redis存储场景数据。针对各种场景下的场景数据,通常存在对场景数据进行统计计数的需求。
3.为满足计数需求,开发人员基于redis指令,针对需要计数的目标场景进行计数方式的逻辑设计,得到适用于目标场景的计数方式。但是,仅针对目标场景开发的计数方式,存在无法扩展至其他场景下的弊端,若存在业务场景或计数需求变更,则需要重新进行计数方式的开发,增加了开发成本。


技术实现要素:

4.本公开实施例至少提供一种计数方法、装置、计算机设备和存储介质。
5.第一方面,本公开实施例提供了一种计数方法,包括:
6.根据目标计数场景,从预先配置的多种计数属性中,确定与所述目标计数场景匹配的至少一个目标计数属性;
7.根据所述目标计数属性,确定存储在远程字典服务redis中的待计数数据对应的数据结构类型,并确定与所述数据结构类型匹配的计数指令集;
8.利用所述计数指令集中的各个计数指令,按照针对所述至少一个目标计数属性分别配置的属性信息,对所述待计数数据进行计数,得到计数结果。
9.在一种可能的实施方式中,所述计数属性包括计数时间窗口属性、计数步长属性、去重计数属性和计数维度属性,所述去重计数属性用于防止重复计数。
10.在一种可能的实施方式中,针对所述计数步长属性配置的属性信息包括目标步长值;
11.所述根据所述目标计数属性,确定存储在远程字典服务redis中的待计数数据对应的数据结构类型,包括:
12.在所述目标计数属性中包括所述去重计数属性和所述计数步长属性的情况下,根据针对所述目标计数属性中的计数步长属性配置的目标步长值,确定所述待计数数据对应的所述数据结构类型。
13.在一种可能的实施方式中,针对所述计数时间窗口属性配置的属性信息包括时间窗口信息,针对所述计数维度属性配置的属性信息包括至少一个目标维度参数,针对所述去重计数属性配置的属性信息包括至少一个去重参数;
14.利用所述计数指令集中的各个计数指令,按照针对所述至少一个目标计数属性分别配置的属性信息,对所述待计数数据进行计数,得到计数结果,包括:
15.在所述目标计数属性中包括所述计数维度属性的情况下,基于针对所述计数维度属性配置的各个目标维度参数,生成包括各个所述目标维度参数的目标计数键;
16.在确定所述目标计数属性中包括所述去重计数属性的情况下,基于所述数据结构类型和针对所述去重计数属性配置的各个去重参数,生成具备所述数据结构类型的目标元素;
17.利用所述计数指令集中的各个计数指令,基于针对所述计数时间窗口属性配置的时间窗口信息、所述目标计数键、所述目标元素和所述目标步长值,对所述待计数数据进行计数,得到所述计数结果。
18.在一种可能的实施方式中,所述基于在所述计数维度属性下配置的各个目标维度参数,生成包括各个所述目标维度参数的目标计数键,包括:
19.根据预设的默认维度参数和各个所述目标维度参数,生成所述目标计数键,其中,在所述目标维度参数包括多个的情况下,多个所述目标参数维度之间利用预设分隔字符串进行分隔,所述默认维度参数用于在未配置目标维度参数的情况下进行计数。
20.在一种可能的实施方式中,利用所述计数指令集中的各个计数指令,基于针对所述计数时间窗口属性配置的时间窗口信息、所述目标计数键、所述目标元素和所述目标步长值,对所述待计数数据进行计数之前,还包括:
21.若所述时间窗口信息指示的计数时长对应的时间单位与预设时间单位不符,则将所述计数时长转换为采用预设时间单位表征的计数时长。
22.在一种可能的实施方式中,所述根据针对所述目标计数属性中的计数步长属性配置的目标步长值,确定所述待计数数据对应的所述数据结构类型,包括:
23.在所述目标步长值满足第一条件的情况下,确定所述待计数数据对应的所述数据结构类型为无序集合类型set;所述第一条件为所述目标步长值等于1;
24.在所述目标步长值满足第二条件的情况下,确定所述待计数数据对应的所述数据结构类型为有序集合类型zset;所述第二条件为所述目标步长值非固定。
25.在一种可能的实施方式中,所述根据所述目标计数属性,确定存储在远程字典服务redis中的待计数数据对应的数据结构类型,包括:
26.在确定所述目标计数属性中不包括所述去重计数属性的情况下,则确定所述待计数数据对应的数据结构类型为字符串类型。
27.在一种可能的实施方式中,所述利用所述计数指令集中的各个计数指令,按照针对所述至少一个目标计数属性分别配置的属性信息,对所述待计数数据进行计数,得到计数结果,包括:
28.在所述目标计数属性中包括所述计数维度属性的情况下,基于针对所述计数维度属性配置的各个目标维度参数,生成包括各个所述目标维度参数的目标计数键;
29.利用所述计数指令集中与所述字符串结构相对应的各个计数指令,基于针对所述计数时间窗口属性配置的时间窗口信息、所述目标计数键,对所述待计数数据进行计数,得到所述计数结果。
30.在一种可能的实施方式中,在确定所述计数结果之前,还包括:
31.响应于获取的计数请求,基于所述计数请求对应的各个所述目标维度参数和所述计数请求对应的请求标识,生成所述计数请求对应的幂等计数键;
32.在不存在与所述幂等计数键相同的已生成幂等计数键的情况下,建立所述幂等计数键和所述目标计数键之间的映射关系;
33.在得到所述计数结果之后,还包括:
34.根据所述目标计数键对应的映射关系,将所述计数结果作为所述映射关系指示的幂等计数键对应的幂等计数值;其中,所述幂等计数值用于作为所述计数请求对应的请求结果。
35.在一种可能的实施方式中,所述方法还包括:
36.在存在与所述幂等计数键相同的已生成幂等计数键的情况下,获取所述幂等计数键对应的已保存的幂等计数值,将所述幂等计数值作为所述计数请求对应的请求结果。
37.第二方面,本公开实施例还提供一种计数装置,包括:
38.第一确定模块,用于根据目标计数场景,从预先配置的多种计数属性中,确定与所述目标计数场景匹配的至少一个目标计数属性;
39.第二确定模块,用于根据所述目标计数属性,确定存储在远程字典服务redis中的待计数数据对应的数据结构类型,并确定与所述数据结构类型匹配的计数指令集;
40.计数模块,用于利用所述计数指令集中的各个计数指令,按照针对所述至少一个目标计数属性分别配置的属性信息,对所述待计数数据进行计数,得到计数结果。
41.在一种可能的实施方式中,所述计数属性包括计数时间窗口属性、计数步长属性、去重计数属性和计数维度属性,所述去重计数属性用于防止重复计数。
42.在一种可能的实施方式中,针对所述计数步长属性配置的属性信息包括目标步长值;
43.所述第二确定模块,在所述根据所述目标计数属性,确定存储在远程字典服务redis中的待计数数据对应的数据结构类型时,用于在所述目标计数属性中包括所述去重计数属性和所述计数步长属性的情况下,根据针对所述目标计数属性中的计数步长属性配置的目标步长值,确定所述待计数数据对应的所述数据结构类型。
44.在一种可能的实施方式中,针对所述计数时间窗口属性配置的属性信息包括时间窗口信息,针对所述计数维度属性配置的属性信息包括至少一个目标维度参数,针对所述去重计数属性配置的属性信息包括至少一个去重参数;
45.所述计数模块,在利用所述计数指令集中的各个计数指令,按照针对所述至少一个目标计数属性分别配置的属性信息,对所述待计数数据进行计数,得到计数结果时,用于在所述目标计数属性中包括所述计数维度属性的情况下,基于针对所述计数维度属性配置的各个目标维度参数,生成包括各个所述目标维度参数的目标计数键;
46.在确定所述目标计数属性中包括所述去重计数属性的情况下,基于所述数据结构类型和针对所述去重计数属性配置的各个去重参数,生成具备所述数据结构类型的目标元素;
47.利用所述计数指令集中的各个计数指令,基于针对所述计数时间窗口属性配置的时间窗口信息、所述目标计数键、所述目标元素和所述目标步长值,对所述待计数数据进行计数,得到所述计数结果。
48.在一种可能的实施方式中,所述计数模块,在所述基于在所述计数维度属性下配置的各个目标维度参数,生成包括各个所述目标维度参数的目标计数键时,用于根据预设
的默认维度参数和各个所述目标维度参数,生成所述目标计数键,其中,在所述目标维度参数包括多个的情况下,多个所述目标参数维度之间利用预设分隔字符串进行分隔,所述默认维度参数用于在未配置目标维度参数的情况下进行计数。
49.在一种可能的实施方式中,所述计数模块,在执行利用所述计数指令集中的各个计数指令,基于针对所述计数时间窗口属性配置的时间窗口信息、所述目标计数键、所述目标元素和所述目标步长值,对所述待计数数据进行计数之前,还用于若所述时间窗口信息指示的计数时长对应的时间单位与预设时间单位不符,则将所述计数时长转换为采用预设时间单位表征的计数时长。
50.在一种可能的实施方式中,所述第二确定模块,在执行所述根据针对所述目标计数属性中的计数步长属性配置的目标步长值,确定所述待计数数据对应的所述数据结构类型时,用于在所述目标步长值满足第一条件的情况下,确定所述待计数数据对应的所述数据结构类型为无序集合类型set;所述第一条件为所述目标步长值等于1;
51.在所述目标步长值满足第二条件的情况下,确定所述待计数数据对应的所述数据结构类型为有序集合类型zset;所述第二条件为所述目标步长值非固定。
52.在一种可能的实施方式中,所述第二确定模块,在执行所述根据所述目标计数属性,确定存储在远程字典服务redis中的待计数数据对应的数据结构类型时,用于在确定所述目标计数属性中不包括所述去重计数属性的情况下,则确定所述待计数数据对应的数据结构类型为字符串类型。
53.在一种可能的实施方式中,所述计数模块,在执行所述利用所述计数指令集中的各个计数指令,按照针对所述至少一个目标计数属性分别配置的属性信息,对所述待计数数据进行计数,得到计数结果时,用于在所述目标计数属性中包括所述计数维度属性的情况下,基于针对所述计数维度属性配置的各个目标维度参数,生成包括各个所述目标维度参数的目标计数键;
54.利用所述计数指令集中与所述字符串结构相对应的各个计数指令,基于针对所述计数时间窗口属性配置的时间窗口信息、所述目标计数键,对所述待计数数据进行计数,得到所述计数结果。
55.在一种可能的实施方式中,所述装置还包括:
56.幂等模块,用于在确定所述计数结果之前,用于响应于获取的计数请求,基于所述计数请求对应的各个所述目标维度参数和所述计数请求对应的请求标识,生成所述计数请求对应的幂等计数键;
57.在不存在与所述幂等计数键相同的已生成幂等计数键的情况下,建立所述幂等计数键和所述目标计数键之间的映射关系;
58.以及在得到所述计数结果之后,根据所述目标计数键对应的映射关系,将所述计数结果作为所述映射关系指示的幂等计数键对应的幂等计数值;其中,所述幂等计数值用于作为所述计数请求对应的请求结果。
59.在一种可能的实施方式中,所述幂等模块,还用于在存在与所述幂等计数键相同的已生成幂等计数键的情况下,获取所述幂等计数键对应的已保存的幂等计数值,将所述幂等计数值作为所述计数请求对应的请求结果。
60.第三方面,本公开可选实现方式还提供一种计算机设备,处理器、存储器,所述存
储器存储有所述处理器可执行的机器可读指令,所述处理器用于执行所述存储器中存储的机器可读指令,所述机器可读指令被所述处理器执行时,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
61.第四方面,本公开可选实现方式还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
62.关于上述计数装置、计算机设备、及计算机可读存储介质的效果描述参见上述计数方法的说明,这里不再赘述。
63.本公开实施例提供的计数方法、装置、计算机设备和存储介质,预先配置有多种独立且通用的计数属性,可以适用于多种不同的计数场景;针对当前需要计数的目标计数场景,可以从中选取出针对该目标计数场景的目标计数属性,进一步可以确定与目标计数属性匹配的计数指令集,如此,利用确定的计数指令集,并按照针对目标计数属性配置的属性信息就可以实现对目标计数场景下的待计数数据的计数;采用本公开实施例,针对不同的计数场景,只需要适应性的调整目标计数属性和计数指令集,即可满足变更后的目标计数场景的计数需求,这样,基于灵活选取并配置目标计数属性的方式,即可得到适用于当前计数场景的计数方式,有效降低了计数方式的开发成本。
64.为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
65.为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
66.图1示出了本公开实施例所提供的一种计数方法的流程图;
67.图2示出了本公开实施例所提供的一种计数方法的具体流程示意图;
68.图3示出了本公开实施例所提供的一种幂等计数方法的流程图;
69.图4示出了本公开实施例所提供的一种计数装置的示意图;
70.图5示出了本公开实施例所提供的一种计算机设备结构示意图。
具体实施方式
71.为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
72.另外,本公开实施例中的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。
73.在本文中提及的“多个或者若干个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
74.经研究发现,开发人员在针对单一的业务场景进行计数方式的逻辑设计时,需要先自主确定出与该业务场景相匹配的计数属性,再利用计数属性进行计数方式的开发。但通过各个业务场景对应的计数属性仅适用于场景本身且不存在共性。这样就导致了在一业务场景对应的计数方式开发完成之后,若存在业务场景或计数需求变更,就需要重新确定计数属性并开发技术逻辑,也即,一个业务场景就需要确定一次计数属性,一个需求也需要确定一次计数属性,大大增加了开发成本。
75.基于上述研究,本公开提供了一种计数方法、装置、计算机设备和存储介质,预先配置有多种独立且通用的计数属性,可以适用于多种不同的计数场景;针对当前需要计数的目标计数场景,可以从中选取出针对该目标计数场景的目标计数属性,进一步可以确定与目标计数属性匹配的计数指令集,如此,利用确定的计数指令集,并按照针对目标计数属性配置的属性信息就可以实现对目标计数场景下的待计数数据的计数;采用本公开实施例,针对不同的计数场景,只需要适应性的调整目标计数属性和计数指令集,即可满足变更后的目标计数场景的计数需求,这样,基于灵活选取并配置目标计数属性的方式,即可得到适用于当前计数场景的计数方式,有效降低了计数方式的开发成本。
76.针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
77.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
78.为便于对本实施例进行理解,首先对本公开实施例所公开的一种计数方法进行详细介绍,本公开实施例所提供的计数方法的执行主体一般为具有一定计算能力的终端设备或其他处理设备,其中终端设备可以为用户设备(user equipment,ue)、移动设备、用户终端、终端、个人数字处理设备(personal digital assistant,pda)、手持设备、计算机设备等;在一些可能的实现方式中,该计数方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
79.下面以执行主体为计算机设备为例对本公开实施例提供的计数方法加以说明。
80.如图1所示,为本公开实施例提供的一种计数方法的流程图,可以包括以下步骤:
81.s101:根据目标计数场景,从预先配置的多种计数属性中,确定与目标计数场景匹配的至少一个目标计数属性。
82.这里,目标计数场景可以包括各种业务开发场景,每种业务开发场景均可以存在针对该开发场景下的待计数数据进行计数的需求。例如,目标计数场景可以包括教育的激励场景、音视频/图片等的热度分析场景、各类物品的转介绍场景(如用户a将物品a推荐给
好友的次数)、交通场景(如车流量统计、人流量统计等)等。
83.预先配置的多种计数属性可以为预先确定出的通用于各种目标计数场景的计数属性,也即,利用预先配置的多种计数属性中的至少部分计数属性,可以实现对各种目标计数场景对应的待计数数据的计数。
84.目标计数属性为从多种计数属性中筛选出的、用于对当前目标计数场景对应的待计数数据进行计数的计数属性。不同的目标计数场景,其对应的筛选出的目标计数属性的数量可以不同,例如,目标计数场景1对应的目标计数属性可以包括3个计数属性,目标计数场景2对应的目标计数属性可以包括全部的计数属性。
85.在一种实施例中,预先确定的计数属性可以包括计数时间窗口属性、计数步长属性、去重计数属性和计数维度属性,其中,去重计数属性用于防止重复计数。
86.这里,计数时间窗口属性用于表征计数的时间窗口,也即每次计数的时间段,其中,一个时间窗口的开始时间由在该窗口内的第一次计数请求的时机决定。例如,从当前时刻开始,窗口长度为60秒的时间窗口。又例如,时间窗口可以为自然天、自然周、自然月、自然年、3:00~13:00等等。计数步长属性用于表征每次计数所需要增加的步长值。例如,每次计数加1、加10等等。计数步长属性对应的步长值可以为默认值,在使用计数步长属性的情况下,均可以利用利用默认值进行计数;或者,计数步长属性对应的步长值也可以自定义的数值,该自定义的数值可以在选取计数步长属性为目标计数属性时输入并使用。去重计数属性用于防止重复计数,如指定用户名称作为去重计数属性,则每次出现不同的用户名称才驱动计数,若多次出现相同用户名称,则不驱动计数,也即不改变计数值。计数维度属性用于表征针对待计数数据的统计维度。例如,在教育激励场景下,指定学生标识和课程标识作为计数维度属性,则可以对学生针对各个课程产生的行为进行计数。
87.本步骤在具体实施时,在确定需要进行计数的目标计数场景后,可以先从预先配置的多种计数属性中,确定出指定的针对目标计数场景匹配的至少一个目标计数属性。上述多种计数属性之间相互独立,不存在必须耦合使用的情况。在实际应用中,可以将选取的任一种计数属性作为目标计数属性,也可以将选取的任意2种或3种计数属性均作为目标计数属性,还可以将上述4种计数属性中的每个计数属性均作为目标计数属性。
88.或者,也可以在确定目标计数场景后,可以根据对目标计数场景对应的计数需求的分析,从多种计数属性中,确定各个目标计数属性。例如,针对教育激励场景的计数需求为“累计学生一周内的不同课节开口次数”,则可以确定目标计数属性包括上述计数时间窗口属性、计数步长属性、去重计数属性和计数维度属性,具体的,计数时间窗口属性对应的属性信息可以为自然周,计数步长属性对应的属性信息可以为单个课节内开口次数,去重计数属性对应的属性信息可以包括课程标识和环节标识,计数维度属性对应的属性信息可以为学生标识。
89.示例性的,关于各目标计数场景下的计数需求对应的目标计数属性以及目标计数属性下的属性信息可以如下表一所示:
[0090][0091]
表一
[0092]
上述表一中的计数需求“累计学生一周内的不同课节开口次数”对应于教育激励场景,“作品一分钟内的不同用户的播放量”对应于视频热度分析场景,“累计用户当天邀请好友购买物品的数量”对应于物品的转介绍场景。由表一可知,上述各计数需求对应的目标计数属性均包括全部的计数属性,也即表一指示的各个目标计数场景对应的目标计数属性均包括全部的计数属性,但上述表一仅用作示例,实际应用中目标计数场景对应的目标计数属性例如可以不包括去重计数属性。
[0093]
s102:根据目标计数属性,确定存储在远程字典服务redis中的待计数数据对应的数据结构类型,并确定与数据结构类型匹配的计数指令集。
[0094]
这里,待计数数据为各种目标计数场景下的数据,例如,教育激励场景下的学生行为数据、视频热度分析场景下的浏览记录数据、物品转介绍场景下的物品订单数据。各种目标计数场景下的待计数数据均可以存储在redis中。
[0095]
redis作为一种键值对(key-value)存储系统,可以实现高速存取。本公开实施例中提及的各种目标计数场景对应的待计数数据均可以利用redis存储。上述确定的计数指令集中包括的各个计数指令均为redis指令。redis中存储的待计数数据可以具有不同的数据结构类型,具有不同数据结构类型的数据,可以利用与该数据结构类型对应的计数指令进行处理。
[0096]
具体实施时,在确定目标计数属性后,可以先确定目标计数属性中是否存在能够影响待计数数据的数据结构类型的目标计数属性,如果是,则可以将该目标计数属性对应关联的数据结构类型,作为待计数数据的数据结构类型;如果否,则可以将redis对应的默认数据结构类型作为待计数数据对应的数据结构类型。
[0097]
进一步的,可以根据预先存储的数据结构类型和计数指令之间的第一关联关系,确定与待计数数据对应的数据结构类型相关联的各个计数指令,将相关联的各个计数指令作为确定的计数指令集。或者,也可以预先存储各种数据结构类型和预设指令集之间的第二关联关系,进而,在确定待计数数据对应的数据结构类型后,可以根据第二关联关系,确定出与待计数数据对应的数据结构类型匹配的预设指令集,将该预设指令集作为确定的计
数指令集。
[0098]
示例性的,redis中存储的数据的数据结构类型可以包括以下三种:字符串类型string、无序集合类型set和有序集合类型zset。其中,redis中的set类型是string类型的无序集合,集合成员是唯一的,也即集合中不能出现重复的元素(即数据)。redis中的zset类型是string类型的有序集合,该集合中也不能出现重复的数据,并且,该集合中的每个元素都会关联一个分数score,该集合中元素的score可以存在重复,redis可以通过score来为集合中的元素进行从小到大的排序。
[0099]
上述string类型对应的redis计数指令可以包括incrby和expire等指令,其中,incrby指令用于将redis中的键(key)存储的数字加上指定的增量,expire指令用于设置key的过期时间,key过期后将不再可用,时间单位以秒计。
[0100]
上述set类型对应的redis计数指令可以包括sadd、scard、eval和expire等指令。其中,sadd指令用于将一个或多个元素加入到集合中,已经存在于集合的元素将被忽略;scard指令用于返回集合中元素的数量;eval指令用于指示使用lua解释器执行脚本,lua是一种脚本语言。
[0101]
上述zset类型对应的redis计数指令可以包括zadd、zrange、eval和expire等指令。其中,zadd指令用于将一个或多个元素及其分数值加入到有序集合当中,zrange用于返回有序集合中指定区间内的元素。
[0102]
s103:利用计数指令集中的各个计数指令,按照针对至少一个目标计数属性分别配置的属性信息,对待计数数据进行计数,得到计数结果。
[0103]
这里,针对各个目标计数属性配置的属性信息可以参照上述表一。计数结果也即得到的计数值。
[0104]
具体实施时,在获取针对各个目标计数属性分别配置的属性信息之后,可以根据各个属性信息和计数指令集中的各个计数指令,生成用于对待计数数据进行计数的计数算法,其中,计数算法对应的算法语言可以为lua脚本语言。
[0105]
之后,可以利用确定的计数算法,对存储在redis中的待计数数据进行计数统计,得到计数结果。例如,在数据结构类型为string类型的情况下,可以将string值作为计数值;在数据结构类型为set类型的情况下,可以将set类型的待计数数据的长度作为计数值;在数据结构类型为zset类型的情况下,可以将zset类型的待计数数据的score作为计数值。
[0106]
这样,预先配置有多种独立且通用的计数属性,可以适用于多种不同的计数场景;针对当前需要计数的目标计数场景,可以从中选取出针对该目标计数场景的目标计数属性,进一步可以确定与目标计数属性匹配的计数指令集,如此,利用确定的计数指令集,并按照针对目标计数属性配置的属性信息就可以实现对目标计数场景下的待计数数据的计数;采用本公开实施例,针对不同的计数场景,只需要适应性的调整目标计数属性和计数指令集,即可满足变更后的目标计数场景的计数需求,这样,基于灵活选取并配置目标计数属性的方式,即可得到适用于当前计数场景的计数方式,有效降低了计数方式的开发成本。
[0107]
在一种实施例中,针对计数步长属性配置的属性信息包括目标步长值。示例性的,目标步长值例如可以为上述表一中的1、单个课节内开口次数等。目标步长值也即确定的每次计数后需要增加的数值。针对所需要使用的数据结构类型,可以根据用户具体选取的目标计数属性进行确定。
[0108]
具体的,在选取的目标计数属性包括计数步长属性和去重计数属性的情况下,可以根据针对目标计数属性中的计数步长属性配置的目标步长值,确定待计数数据对应的数据结构类型。
[0109]
具体实施时,可以将目标步长值和预设值进行比较,以确定所需要使用的数据结构类型。在具体应用时,预设值可以为1。在确定目标步长值大于1的情况下,确定待计数数据对应的数据结构类型为redis中的一种数据结构类型;反之,在确定目标步长值不大于1的情况下,确定待计数数据对应的数据结构类型为redis中的另一种数据结构类型。
[0110]
在一种实施例中,关于根据目标步长值,确定待计数数据对应的数据结构类型的步骤,可以分为以下两种情况:
[0111]
情况1、在目标步长值满足第一条件的情况下,确定待计数数据对应的数据结构类型为无序集合类型set。其中,第一条件为目标步长值等于1。
[0112]
这里,在确定目标步长值等于1的情况下,说明待计数数据对应的数据结构类型符合无序集合类型set,也即确定待计数数据对应的数据结构类型为无序集合类型set。
[0113]
情况2、在目标步长值满足第二条件的情况下,确定待计数数据对应的数据结构类型为有序集合类型zset。其中,第二条件为目标步长值非固定。
[0114]
这里,由于在不同的目标计数场景下,每次计数所需要增长的步长值可以不同,并且还可能存在某些场景下对应每次计数增长的步长值均不固定。例如,在统计学生一周内的不同课节开口次数时,不同课节的开口次数可能受学生对课节的感兴趣程度、教师授课风格等因素影响,所以存在步长值不固定的情况。这时,可以将待计数事件的事件属性作为动态参数(如表一中的将单个课节内开口次数作为目标步长值)。
[0115]
具体实施时,在确定目标步长值非固定的情况下,说明待计数数据对应的数据结构类型符合有序集合类型zset,也即可以确定待计数数据对应的数据结构类型为zset。
[0116]
在一种实施例中,针对计数时间窗口属性配置的属性信息包括时间窗口信息,针对计数维度属性配置的属性信息包括至少一个目标维度参数,针对去重计数属性配置的属性信息包括至少一个去重参数。
[0117]
这里,时间窗口信息也即需要计数的时间段,一个时间窗口的开始时间由在该窗口内的第一次计数请求的时机决定。例如,时间窗口可以为当天、500秒内等等。目标维度参数具体可以根据实际存储的待计数数据决定。例如,目标维度参数可以为学生标识、学校标识、教师标识、作品标识、用户标识、用户名称等。目标维度参数可以包括一个或多个,具体设置的目标维度参数的数量可以根据计数粒度进行确定,计数粒度越细,目标维度参数的数量可以越多。去重参数也即需要去重的维度,也可以根据实际存储的待统计数据决定。例如,去重参数可以为课程标识、课程环节标识、订单标识、用户标识等。在具体应用时,在一目标计数场景下的去重参数可以作为另一目标计数场景下的目标维度参数,一目标计数场景下的目标维度参数也可以作为另一目标计数场景下的去重参数,但针对同一目标计数场景下进行计数时,该目标计数场景对应的去重参数和目标维度参数可以不存在重叠。
[0118]
具体实施时,针对上述s103,可以按照以下步骤实施:
[0119]
s103-1:在目标计数属性中包括计数维度属性的情况下,基于针对计数维度属性配置的各个目标维度参数,生成包括各个目标维度参数的目标计数键。
[0120]
这里,目标计数键为对目标计数场景对应的待计数数据进行计数时所使用的目标
key。
[0121]
具体实施时,在目标计数属性中包括计数维度属性的情况下,可以获取在计数维度属性下配置的各个目标维度参数,之后,可以将各个目标维度参数进行组合,得到目标计数键。
[0122]
在一种实施例中,s103-1可以按照以下步骤实施:根据预设的默认维度参数和各个目标维度参数,生成目标计数键,其中,在目标维度参数包括多个的情况下,多个目标参数维度之间利用预设分隔字符串进行分隔;默认维度参数用于在未配置目标维度参数的情况下进行计数。
[0123]
这里,redis对应的计数键(key)通常需要具有固定格式,具体的,固定格式可以为key中包括默认维度参数和指定的各个目标维度参数。其中,默认维度参数作为固定前缀,与目标维度参数使用下划线进行分隔,且在目标维度参数包括多个的情况下,多个目标维度参数之间利用预设分隔字符串分隔。
[0124]
预设分隔字符串和默认维度参数可以为开发人员预先设定的,预设分隔字符串用于区分相邻的两个目标维度参数,具体的,预设分隔字符串需要不同于任一目标维度参数。
[0125]
在配置了目标维度参数的情况下,默认维度参数可以用作无意义的固定前缀,在未配置目标维度参数的情况下,也即,在目标计数属性中不包括计数维度属性的情况下,默认维度参数可以作为一个目标维度参数进行计数。
[0126]
示例性的,预设分隔字符串可以为#cntp@,默认维度参数可以为prefix_sample,目标维度参数可以包括学生标识1111、课程标识11,则目标key可以为prefix_sample_1111#cntp@11。
[0127]
s103-2:在确定目标计数属性中包括去重计数属性的情况下,基于数据结构类型和针对去重计数属性配置的各个去重参数,生成具备数据结构类型的目标元素。
[0128]
这里,在确定数据结构类型之后,可以生成具备数据结构类型的目标元素,目标元素中包括由去重参数组成的去重键,在去重参数包括多个的情况下,也可以利用去重计数属性对应的分隔字符串进行分隔,其中,去重计数属性对应的分隔字符串与计数维度属性对应的预设分隔字符串可以相同,可以不同。
[0129]
zset类型的一个目标元素是《string:key,num:score》,其中,string标识字符串,key标识由去重参数组成的去重键,num:score表示将key的得分值score作为确定的计数值num。示例性的,数据结构类型为zset,去重参数包括订单标识和用户标识,去重计数属性对应的分隔字符串可以为#cntp@,则生成的目标元素中的key为“订单标识#cntp@用户标识”,生成的目标元素为《string:订单标识#cntp@用户标识,num:score》。
[0130]
s103-3:利用计数指令集中的各个计数指令,基于针对计数时间窗口属性配置的时间窗口信息、目标计数键、目标元素和目标步长值,对待计数数据进行计数,得到计数结果。
[0131]
这里,在目标计数属性中包括计数步长属性的情况下,则可以获取针对计数步长属性配置的目标步长值。或者,在目标计数属性中不包括计数步长属性的情况下,可以将设置的默认值作为目标步长值,使用默认值进行计数。
[0132]
在一种实施例中,在执行s103-3之前,还需要确定是否使用了自定义的窗口计数,确定是否使用自定义的窗口计数的过程,也即确定计数时间窗口属性配置的时间窗口信息
指示的计数时长的时间单位是否为预设时间单位。这里,预设时间单位即为redis要求使用的时间单位,具体的,预设时间单位可以为秒。
[0133]
具体的,在获取针对计数时间窗口属性配置的时间窗口信息之后,可以确定该时间窗口信息指示的计数时长对应的时间单位是否与预设时间单位相符,若是,则说明时间窗口信息指示的计数时长以秒为单位,则可以直接将该计数时长作为时间窗口信息。若否,则需要将时间窗口信息指示的计数时长转换为采用预设时间单位表征的计数时长。示例性的,在时间窗口信息指示的计数时长为自然天的情况下,可以将该计数时长转换为以秒为单位的计数时长,也即,确定计数时长为86400秒。
[0134]
此外,在计数时长对应的时间单位与预设时间单位不符时,生成的目标计数键中还需要包括时间窗口的结束时间(如yyyymmdd,其中,yyyy表示年份,mm表示月数,dd表示当前日期对应的数值,dd具体可以为1~31中的任一数值)。其中,结束时间可以根据接收计数请求的当前时间和计数时长(例如为自然天/自然周/自然月)确定。示例性的,默认维度参数为prefix_sample、当前时间为(周四)2021-10-28 00:00:00、学生标识1111、课程标识11,以“累计学生一周内的不同课节开口次数”为计数目标,确定的key为prefix_sample_1111#cntp@11_2021-11-01 00:00:00。其中,_2021-11-01 00:00:00为根据当前时间2021-10-28 00:00:00确定出的时间窗口的结束时间。
[0135]
在将时间窗口信息指示的计数时长转换为采用秒表征的计数时长时,可以以当前时间为起点,对时间窗口信息指示的计数时长进行转换。例如,以当前时间为2021-10-28(周四)00:00:00,时间窗口信息指示的计数时长为本周为例,则可以确定本周到下一周还有四天,即周四、周五、周六、周日,则在将时间窗口信息指示的计数时长转换为秒表征的计数时长后,得到的计数时长为345600秒。进而,可以将345600秒作为时间窗口信息指示的计数时长。
[0136]
进一步的,s103-3在具体实施时,可以将针对计数时间窗口属性配置的时间窗口信息指示的计数时长作为计数的生成时间值(time to live,ttl),将计数指令集中的各个计数指令(如sadd、scard、eval和expire等),ttl、目标计数键、目标元素、目标步长值等进行组合,得到lua脚本语言的计数算法,并利用该计数算法对待计数数据进行计数,得到计数结果。
[0137]
在一种实施例中,目标计数场景对应的目标计数属性中可能还存在不包括去重计数属性的情况,也即确定目标计数场景不使用去重计数。在这种情况下,可以直接将待计数数据对应的数据结构类型为字符串类型。
[0138]
示例性的,本公开实施例在确定目标计数属性后,可以先进行是否使用去重计数以及是否使用了自定义的窗口计数的检查,并根据检查结果以及各个目标计数属性下的属性信息,实现计数。如图2所示,为本公开实施例提供的一种计数方法的具体流程示意图。其中,在确定目标计数属性后,可以进行是否使用去重计数的检查,也即确定目标计数属性中是否存在去重计数属性,如果否,则确定待计数数据对应的数据结构类型为字符串类型string,并确定待计数数据对应的计数指令集中可以包括incrby和expire等redis指令,并将string值作为计数值。如果是,则需要获取针对目标计数属性中的计数步长属性配置的目标步长值,之后,确定目标步长值是否等于1,若是,则确定数据结构类型为set,同时,可以确定计数指令集中可以包括sadd、scard、eval和expire等指令,以及可以基于set类型和
针对去重计数属性配置的各个去重参数,生成set类型的目标元素,然后可以将set类型的目标元素的长度作为计数值。在目标元素中的去重参数包括多个的情况下,可以利用去重计数属性对应的分隔字符串进行分隔。
[0139]
若否,则确定数据结构类型为zset,同时,可以确定计数指令集中可以包括zadd、zrange、eval和expire等指令,以及可以基于zset类型和针对去重计数属性配置的各个去重参数,生成zset类型的目标元素,然后,可以将目标元素的score作为计数值。在目标元素中的去重参数包括多个的情况下,可以利用去重计数属性对应的分隔字符串进行分隔。
[0140]
同时,还可以根据针对计数时间窗口属性配置的时间窗口信息所指示的计数时长,确定是否使用了自定义的窗口计数,若是,可以直接将以秒为单位的计数时长作为ttl,换言之,可以将自定义的n秒作为ttl,并可以根据针对计数维度属性配置的各个目标维度参数和默认维度参数,生成目标计数键。其中,目标计数键的格式可以为“默认维度参数_目标维度参数”,多个目标维度参数之间以预设分隔字符串分隔。
[0141]
若否,在则需要将计数时长转换为采用预设时间单位表征的计数时长,将转换后的计数时长作为ttl,并可以基于各个目标维度参数、时间窗口的结束时间和默认维度参数,生成目标计数键。其中,ttl可以在以当前时间为起点,对时间窗口信息指示的计数时长进行转换后得到,目标计数键的格式可以为“默认维度参数_目标维度参数_时间窗口的结束时间”,多个目标维度参数之间以预设分隔字符串分隔。
[0142]
最后,可以根据确定的计数指令集、ttl、目标计数键、目标元素和目标步长值,对待计数数据进行计数,得到计数结果。
[0143]
在一种实施例中,在确定目标计数属性中不包括去重计数属性的情况下,也即在确定未使用去重计数的情况下,可以按照如下步骤对待计数数据进行计数:
[0144]
步骤一、在目标计数属性中包括计数维度属性的情况下,基于针对计数维度属性配置的各个目标维度参数,生成包括各个目标维度参数的目标计数键。
[0145]
本步骤一在具体实施时可以参照上述s103-1,此处不再赘述。
[0146]
步骤二、利用计数指令集中与字符串结构相对应的各个计数指令,基于针对计数时间窗口属性配置的时间窗口信息、目标计数键,对待计数数据进行计数,得到计数结果。
[0147]
这里,在确定未使用去重计数的情况下,可以在获取针对计数时间窗口属性配置的时间窗口信息之后,判断是否使用了自定义的窗口计数,若是,则将计数时间窗口属性对应的以秒为单位的计数时长作为ttl,如否,则将计数时间窗口属性对应的计数时长转换为以秒为单位的计数时长,将转换得到的计数时长作为ttl。之后,将计数指令集中的各个计数指令和ttl、目标计数键等进行组合,得到lua脚本语言的计数算法,并利用该计数算法对待计数数据进行计数,得到计数结果。
[0148]
在一种实施例中,幂等功能在计算机领域代表任意多次执行请求(命令)的结果与第一次执行结果相同。在服务框架重试或者分布式业务等机制下,可能存在同一个计数请求被触发多次的情况,因此,需要引入对幂等的需求,从而减少多次响应同一计数请求的计算量,避免计算资源的浪费。基于此,本公开实施例提供了一种将幂等功能融入上述计数方法的步骤,并且由于上述计数方法可以利用lua脚本语言执行,为将幂等功能融入上述计数方法,保证幂等计数的原子性,幂等计数的流程需要与上述计数方法对应在同一lua脚本中执行。
[0149]
具体的,在确定计数结果之前,可以先获取来自业务方的计数请求。这里,计数请求包括但不限于在各种目标计数场景下仅用于计数的请求,任一需要使用计数方法的请求均可以为本公开实施例中所提及的计数请求。例如请求对应的请求结果需要依赖于计数结果,则该请求即可作为一种计数请求。
[0150]
在获取计数请求之后,可以响应于该计数请求,基于计数请求对应在计数维度属性下配置的各个目标维度参数和计数请求对应的请求标识,生成计数请求对应的幂等计数键。
[0151]
计数请求还可以携带有能够唯一标识该请求的请求标识logid,同一个计数请求即使被触发多次,其对应的请求标识也一定相同。因此,在响应计数请求的过程中,还可以确定该计数请求的请求标识。
[0152]
进一步的,可以基于各个目标维度参数,生成计数请求对应的请求计数键。具体的,生成请求计数键的步骤可以参照上述s103-1中基于各个目标维度参数,生成目标计数键的步骤,此处不再赘述。在得到请求计数键后可以将计数请求对应的请求标识和请求计数键组合,得到计数请求对应的幂等计数键。其中,幂等计数键可以为用idempotent_key标识。在具体实施时,幂等计数键和目标计数键可以在获取到计数请求后一起生成,其中,幂等计数键相较于目标计数键而言,还需要包括请求标识logid。
[0153]
示例性的,在确定的请求计数键为prefix_sample_1111#cntp@11_2021-10-28,请求标识为logid的情况下,幂等计数键可以为logid_prefix_sample_@1111#cntp@11_2021-10-28。
[0154]
进一步的,可以确定该计数请求是否为首次执行,也即确定会否存在与该幂等计数键相同的已生成幂等计数键。如果否,则说明该计数请求在之前未响应过,也未利用上述各实施例对应的计数方法确定过该计数请求的计数结果。且由于计数请求为首次执行,幂等计数键对应的幂等计数值必定还未计算得到,因此,可以先将幂等计数值置为0。
[0155]
具体的,可以利用设置setnx指令的方式,标识计数请求是否为首次执行,以及为幂等计数值赋值。其中,setnx(set if not exists)指令是一种redis指令,用于在指定的idempotent_key不存在时,为idempotent_key设置指定的值。具体实施时,在确定不存在与计数请求对应的幂等计数键相同的已生成幂等计数键时,可以成功设置setnx指令,并利用setnx指令,为幂等计数值置赋值0。其中,setnx指令设置成功,能够标识计数请求首次执行。
[0156]
进而,在setnx指令设置成功时,可以利用上述各实施例对应的计数方法执行该计数请求对应的计数操作,确定出该计数请求对应的计数结果。
[0157]
具体的,可以执行上述s103,利用计数指令集中的各个计数指令,按照针对至少一个目标计数属性分别配置的属性信息,对待计数数据进行计数,得到计数结果。具体确定计数结果的步骤,可以参照上述各实施例,此处不再赘述。
[0158]
另外,在确定不存在与幂等计数键相同的已生成幂等计数键的情况下还可以建立并保存目标计数键与计数请求对应的幂等计数键之间的具备映射关系。
[0159]
进一步的,在确定计数请求对应的计数结果之后,可以根据保存的目标计数键、以及该计数请求对应的映射关系,将计数结果作为映射关系指示的幂等计数键对应的幂等计数值。例如,可以使用set指令,将计数结果设置为幂等计数键对应的幂等计数值,其中,set
指令是一种redis指令,用于设置给定幂等计数键的幂等计数值。幂等计数值用于作为计数请求对应的请求结果。这样,基于确定的计数请求对应的幂等计数键和目标计数键之间的映射关系,实现将幂等计数作为额外的计数属性以供选择,提高了计数的灵活性。
[0160]
另外,由于多个不同计数请求对应需要计数的待计数数据和计数需求可以是相同的,多个不同计数请求中的每个计数请求对应在计数维度属性下配置的各个目标维度参数也可以相同。这种情况下,每个计数请求对应的请求计数键必定是相同,只是不同的计数请求对应的请求标识不同,所以各个计数请求对应的幂等计数键也不同,但不同之处仅在于各个幂等计数键中的请求标识不同。
[0161]
此时,就会形成多个不同计数请求对应的幂等计数键与同一个目标计数键具有映射关系,也即,一个目标计数键可以对应于多个幂等计数键。例如,计数请求1对应的幂等计数键为“logid1_请求计数键1”、计数请求2对应的幂等计数键为“logid2_请求计数键1”、计数请求3对应的幂等计数键为“logid3_请求计数键1”,上述三个幂等计数键均可以对应于同一个目标计数键1,也即目标计数键1与上述三个幂等计数键均具有映射关系。
[0162]
此外,在生成目标计数键以及各个计数请求对应的幂等计数键时,可以为目标计数键以及各个计数请求对应的幂等计数键分配相同的哈希标签,从而可以保证目标计数键和各个计数请求对应的幂等计数键可以分配至同一个redis slot(槽点)使用,其中哈希标签可以由开发人员自主定义。
[0163]
示例性的,目标计数键可以为“{固定前缀}_{目标维度参数}{哈希标签}”或{固定前缀}_{目标维度参数}_{yyyymmdd}{哈希标签},其中哈希标签由开发者定义
[0164]
幂等计数键可以为“logid_{固定前缀}_{目标维度参数}{哈希标签}”或“logid_{固定前缀}_{目标维度参数1}_{yyyymmdd}{哈希标签}”。
[0165]
在另一种实施例中,在确定存在与计数请求对应的幂等计数键相同的已生成幂等计数键的情况下,则说明该幂等计数键对应的计数请求已经在之前被触发过,非首次执行,其对应的计数结果也已经确定,又由于该计数请求每次执行的结果均相同,则可以获取幂等计数键对应的已保存的幂等计数值,并将幂等计数值作为计数请求对应的请求结果。
[0166]
具体实施时,在确定存在与计数请求对应的幂等计数键相同的已生成幂等计数键时,setnx指令将设置失败,也即能够标识计数请求非首次执行,进而,可以利用get指令,获取幂等计数键对应的已保存的幂等计数值,并将该值作为计数请求对应的请求结果。其中,get指令是一种redis指令,用于获取指定幂等计数键的幂等计数值。
[0167]
如图3所示,为本公开实施例提供的一种幂等计数方法的流程图,其中,在获取计数请求后,可以响应计数请求,确定计数请求对应的幂等计数键(idempotent_key)和目标计数键,将idempotent_key作为该计数请求对应的键key,并在确定该idempotent_key不存在相同的已生成幂等计数键的情况下,确定使用redis指令中的setnx指令,利用setnx指令设置幂等计数键对应的幂等计数值(value),其中,计数请求对应的ttl小于目标计数键对应的ttl。继而,可以确定setnx指令是否设置成功,在确定setnx指令设置成功的情况下,执行计数并确定计数结果。其中,执行计数并确定计数结果的过程即为执行上述s103的过程。之后,可以利用set指令,将计数结果设置为(idempotent_key)对应的幂等计数值(key)。在确定setnx指令设置失败的情况下,说明该计数请求重复执行,则可以利用get指令,获取幂等计数键(idempotent_key)对应的已保存的幂等计数值,并将该幂等计数值作为计数请求
对应的请求结果。
[0168]
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
[0169]
基于同一发明构思,本公开实施例中还提供了与计数方法对应的计数装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述计数方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
[0170]
如图4所示,为本公开实施例提供的一种计数装置的示意图,包括:
[0171]
第一确定模块401,用于根据目标计数场景,从预先配置的多种计数属性中,确定与所述目标计数场景匹配的至少一个目标计数属性;
[0172]
第二确定模块402,用于根据所述目标计数属性,确定存储在远程字典服务redis中的待计数数据对应的数据结构类型,并确定与所述数据结构类型匹配的计数指令集;
[0173]
计数模块403,用于利用所述计数指令集中的各个计数指令,按照针对所述至少一个目标计数属性分别配置的属性信息,对所述待计数数据进行计数,得到计数结果。
[0174]
在一种可能的实施方式中,所述计数属性包括计数时间窗口属性、计数步长属性、去重计数属性和计数维度属性,所述去重计数属性用于防止重复计数。
[0175]
在一种可能的实施方式中,针对所述计数步长属性配置的属性信息包括目标步长值;
[0176]
所述第二确定模块402,在所述根据所述目标计数属性,确定存储在远程字典服务redis中的待计数数据对应的数据结构类型时,用于在所述目标计数属性中包括所述去重计数属性和所述计数步长属性的情况下,根据针对所述目标计数属性中的计数步长属性配置的目标步长值,确定所述待计数数据对应的所述数据结构类型。
[0177]
在一种可能的实施方式中,针对所述计数时间窗口属性配置的属性信息包括时间窗口信息,针对所述计数维度属性配置的属性信息包括至少一个目标维度参数,针对所述去重计数属性配置的属性信息包括至少一个去重参数;
[0178]
所述计数模块403,在利用所述计数指令集中的各个计数指令,按照针对所述至少一个目标计数属性分别配置的属性信息,对所述待计数数据进行计数,得到计数结果时,用于在所述目标计数属性中包括所述计数维度属性的情况下,基于针对所述计数维度属性配置的各个目标维度参数,生成包括各个所述目标维度参数的目标计数键;
[0179]
在确定所述目标计数属性中包括所述去重计数属性的情况下,基于所述数据结构类型和针对所述去重计数属性配置的各个去重参数,生成具备所述数据结构类型的目标元素;
[0180]
利用所述计数指令集中的各个计数指令,基于针对所述计数时间窗口属性配置的时间窗口信息、所述目标计数键、所述目标元素、和所述目标步长值,对所述待计数数据进行计数,得到所述计数结果。
[0181]
在一种可能的实施方式中,所述计数模块403,在所述基于在所述计数维度属性下配置的各个目标维度参数,生成包括各个所述目标维度参数的目标计数键时,用于根据预设的默认维度参数和各个所述目标维度参数,生成所述目标计数键,其中,在所述目标维度参数包括多个的情况下,多个所述目标参数维度之间利用预设分隔字符串进行分隔;所述
默认维度参数用于在未配置目标维度参数的情况下进行计数。
[0182]
在一种可能的实施方式中,所述计数模块403,在执行利用所述计数指令集中的各个计数指令,基于针对所述计数时间窗口属性配置的时间窗口信息、所述目标计数键、所述目标元素和所述目标步长值,对所述待计数数据进行计数之前,还用于若所述时间窗口信息指示的计数时长对应的时间单位与预设时间单位不符,则将所述计数时长转换为采用预设时间单位表征的计数时长。
[0183]
在一种可能的实施方式中,所述第二确定模块402,在执行所述根据针对所述目标计数属性中的计数步长属性配置的目标步长值,确定所述待计数数据对应的所述数据结构类型时,用于在所述目标步长值满足第一条件的情况下,确定所述待计数数据对应的所述数据结构类型为无序集合类型set;所述第一条件为所述目标步长值等于1;
[0184]
在所述目标步长值满足第二条件的情况下,确定所述待计数数据对应的所述数据结构类型为有序集合类型zset;所述第二条件为所述目标步长值非固定。
[0185]
在一种可能的实施方式中,所述第二确定模块402,在执行所述根据所述目标计数属性,确定存储在远程字典服务redis中的待计数数据对应的数据结构类型时,用于在确定所述目标计数属性中不包括所述去重计数属性的情况下,则确定所述待计数数据对应的数据结构类型为字符串类型。
[0186]
在一种可能的实施方式中,所述计数模块403,在执行所述利用所述计数指令集中的各个计数指令,按照针对所述至少一个目标计数属性分别配置的属性信息,对所述待计数数据进行计数,得到计数结果时,用于在所述目标计数属性中包括所述计数维度属性的情况下,基于针对所述计数维度属性配置的各个目标维度参数,生成包括各个所述目标维度参数的目标计数键;
[0187]
利用所述计数指令集中与所述字符串结构相对应的各个计数指令,基于针对所述计数时间窗口属性配置的时间窗口信息、所述目标计数键,对所述待计数数据进行计数,得到所述计数结果。
[0188]
在一种可能的实施方式中,所述装置还包括:
[0189]
幂等模块404,用于在确定所述计数结果之前,用于响应于获取的计数请求,基于所述计数请求对应的各个所述目标维度参数和所述计数请求对应的请求标识,生成所述计数请求对应的幂等计数键;
[0190]
在不存在与所述幂等计数键相同的已生成幂等计数键的情况下,建立所述幂等计数键和所述目标计数键之间的映射关系;
[0191]
以及在得到所述计数结果之后,根据所述目标计数键对应的映射关系,将所述计数结果作为所述映射关系指示的幂等计数键对应的幂等计数值;其中,所述幂等计数值用于作为所述计数请求对应的请求结果。
[0192]
在一种可能的实施方式中,所述幂等模块404,还用于在存在与所述幂等计数键相同的已生成幂等计数键的情况下,获取所述幂等计数键对应的已保存的幂等计数值,将所述幂等计数值作为所述计数请求对应的请求结果。
[0193]
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
[0194]
本公开实施例还提供了一种计算机设备,如图5所示,为本公开实施例提供的一种
计算机设备结构示意图,包括:
[0195]
处理器51和存储器52;所述存储器52存储有处理器51可执行的机器可读指令,处理器51用于执行存储器52中存储的机器可读指令,所述机器可读指令被处理器51执行时,处理器51执行下述步骤:s101:根据目标计数场景,从预先配置的多种计数属性中,确定与目标计数场景匹配的至少一个目标计数属性;s102:根据目标计数属性,确定存储在远程字典服务redis中的待计数数据对应的数据结构类型,并确定与数据结构类型匹配的计数指令集以及s103:利用计数指令集中的各个计数指令,按照针对至少一个目标计数属性分别配置的属性信息,对待计数数据进行计数,得到计数结果。
[0196]
上述存储器52包括内存521和外部存储器522;这里的内存521也称内存储器,用于暂时存放处理器51中的运算数据,以及与硬盘等外部存储器522交换的数据,处理器51通过内存521与外部存储器522进行数据交换。
[0197]
上述指令的具体执行过程可以参考本公开实施例中所述的计数方法的步骤,此处不再赘述。
[0198]
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的计数方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
[0199]
本公开实施例所提供的计数方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的计数方法的步骤,具体可参见上述方法实施例,在此不再赘述。
[0200]
该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(software development kit,sdk)等等。
[0201]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0202]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0203]
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0204]
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得
一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0205]
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1