1.本发明涉及数据处理技术领域,尤其是涉及一种数据处理方法、装置和电子设备。
背景技术:
2.redis是一款高性能的key-value数据库。系统需要在redis中维护一系列缓存列表,缓存列表中的数据需要定时删除。然而redis仅支持字符串对象添加过期时间,不支持对缓存列表中的对象增加过期时间。为了实现对缓存列表中的对象定时删除的功能,可以将列表中的数据在redis中以字符串的形式存储,进而添加过期时间;还可以对列表中数据增加一个expiretime字段,基于该expiretime字段对列表中的数据实现定时删除。但是上述这些方式需要消耗redis中较多的内存资源,当缓存列表中的数据较多时,还可能会导致redis请求阻塞,引起生产事故。
技术实现要素:
3.有鉴于此,本发明的目的在于提供一种数据处理方法、装置和电子设备,以避免批量查询或删除数据的操作,降低内存消耗和请求阻塞的概率,进而提高清除过期数据的效率以及准确度,提高数据处理的稳定性。
4.第一方面,本发明实施例提供了一种数据处理方法,预设的计时列表中包括多个依次排列的列表位置;根据列表位置的排列顺序,列表指针每隔预设的时间间隔在计时列表中移动一个列表位置;该方法包括:当向存储空间存储数据时,获取数据的存储时长;根据存储时长,以及列表指针在计时列表中的当前位置,从计时列表中确定目标列表位置;将数据的数据处理事项添加至目标列表位置,以当列表指针移动至目标列表位置时,从存储空间中删除数据。
5.进一步的,根据存储时长,以及列表指针在计时列表中的当前位置,从计时列表中确定目标列表位置的步骤,包括:根据存储时长和时间间隔,确定存储时长对应的位置数量;按照列表位置的排列顺序,将列表指针的当前位置之后的第n个的列表位置,确定为目标列表位置;其中,n的值为位置数量。
6.进一步的,计时列表包括多级子列表;每级子列表对应一个计时单位和一个列表指针;多级子列表中,除最低级的子列表外,每级子列表的列表指针的时间间隔等于:下一级子列表的列表指针从下一级子列表的第一个列表位置移动至最后一个列表位置的时长;根据存储时长,以及列表指针在计时列表中的当前位置,从计时列表中确定目标列表位置的步骤,包括:根据存储时长,确定每级子列表对应的计时单位的数量;从最高级的子列表对应的计时单位开始,查找首个数量不为零的计时单位;如果首个数量不为零的计时单位对应的子列表,是最低级的子列表,根据首个数量不为零的计时单位的数量,以及最低级的子列表的列表指针的当前位置,确定目标列表位置。
7.进一步的,方法还包括:如果首个数量不为零的计时单位对应的子列表,不是最低级的子列表,将首个数量不为零的计时单位的子列表确定为目标子列表;根据首个数量不
为零的计时单位的数量,以及目标子列表的列表指针的当前位置,从目标子列表中确定临时列表位置;将数据处理事项添加至临时列表位置,以当目标子列表的列表指针移动至临时列表位置时,将数据处理事项添加至目标子列表的下一级列表中。
8.进一步的,将数据处理事项添加至临时列表位置的步骤之后,方法还包括:当目标子列表的列表指针移动至临时列表位置时,判断目标子列表的下一级子列表是否是最低级的子列表;如果不是最低级的子列表,根据下一级子列表的计时单位的数量,以及下一级子列表的列表指针的当前位置,从下一级子列表中确定更新的临时列表位置;将数据处理事项添加至更新的临时列表位置,以当下一级子列表的列表指针移动至更新的临时列表位置时,将数据处理事项添加至下一级列表的下一级列表中,直至到达最低级的子列表;如果是最低级的子列表,根据最低级的子列表的计时单位的数量,确定目标列表位置。
9.进一步的,多级子列表中,除最高级的子列表外,每级子列表的最后一个列表位置设置有结束标识;结束标识用于:当当前子列表的列表指针到达最后一个列表位置时,将列表指针移动至当前子列表的第一个列表位置。
10.进一步的,计时列表包括三级子列表;最高级的子列表对应的计时单位为时;最高级的子列表的下一级子列表对应的计时单位为分;最低级的子列表对应的计时单位为秒。
11.进一步的,数据处理事项包括针对数据的删除指令;当列表指针移动至目标列表位置时,从存储空间中删除数据的步骤,包括:当列表指针移动至目标列表位置时,执行数据处理事项中的删除指令,以从存储空间中删除数据。
12.第二方面,本发明实施例提供了一种数据处理装置,预设的计时列表中包括多个依次排列的列表位置;根据列表位置的排列顺序,列表指针每隔预设的时间间隔在计时列表中移动一个列表位置;该装置包括:获取模块,用于当向存储空间存储数据时,获取数据的存储时长;确定模块,用于根据存储时长,以及列表指针在计时列表中的当前位置,从计时列表中确定目标列表位置;删除模块,用于将数据的数据处理事项添加至目标列表位置,以当列表指针移动至目标列表位置时,从存储空间中删除数据。
13.第三方面,本发明实施例提供了一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的机器可执行指令,处理器执行机器可执行指令以实现第一方面任一项的数据处理方法。
14.第四方面,本发明实施例提供了一种机器可读存储介质,机器可读存储介质存储有机器可执行指令,机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现第一方面任一项的数据处理方法。
15.本发明实施例带来了以下有益效果:
16.本发明实施例提供了一种数据处理方法、装置和电子设备,当向存储空间存储数据时,获取数据的存储时长;根据该存储时长,以及列表指针在计时列表中的当前位置,从计时列表中确定目标列表位置;将数据的数据处理事项添加至目标列表位置,以当列表指针移动至目标列表位置时,从存储空间中删除数据。该方式中,通过建立计时列表的方式,将到达存储时长的数据,根据目标列表位置中数据的数据处理事项,从存储空间中删除,每次删除的数据量较少,避免了批量查询或删除数据的操作,无需消耗较多的内存资源,也不会导致请求阻塞,同时支持多种数据结构的存储和删除,进而提高了清除过期数据的效率以及准确度,提高了数据处理的稳定性。
17.本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
18.为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
19.为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
20.图1为本发明实施例提供的一种数据处理方法的流程图;
21.图2为本发明实施例提供的另一种数据处理方法的流程图;
22.图3为本发明实施例提供的另一种数据处理方法的流程图;
23.图4为本发明实施例提供的一种数据处理装置的结构示意图;
24.图5为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
25.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
26.目前为了实现对缓存列表中的对象定时删除的功能,通常的解决方案有以下三种:
27.一、将列表中的数据在redis中以字符串形式独立存储,并在存入时设置其过期时间,依赖redis对于字符串的过期机制保障,通过keys命令查寻所有数据;但是该方式中,每个数据以独立字符串形式存储相比于列表形式存储需要消耗较多的redis内存,同时在redis中存储数据量大的情况下,使用keys命令获取所有数据耗时较长,由于redis为单线程服务,可能会导致redis请求阻塞,引起生产事故;
28.二、在redis中使用列表对数据进行存储,数据在存入redis时添加一个expiretime字段;后台服务启动定时任务每秒拉取一次所有的列表数据,根据expiretime值调用redis的srem命令清除过期数据;该方式中,当列表中数据量大时,每秒拉取一次整个列表耗时时间较长,容易导致redis请求阻塞;另外,如果数据较大,占用带宽资源多,还会增加expiredtime字段,同时也会消耗较多的redis内存资源。
29.三、在redis中使用有序列表对数据进行存储,数据在存入redis时,使用expiretime作为排序分数。后台服务启动定时任务每秒调用redis的zremrangebyscore命令清理分数大于当前时间内的所有数据;该方式中,zremrangebyscore命令执行时长和列表数据量与命中的删除数据数量正相关,命令执行时长不可控;由于redis为单线程服务,可能会导致redis请求阻塞,引起生产事故,同时增加expiredtime字段的同时也增加redis
内存资源开销。
30.另外,对于上述三种方法只能针对某种数据结构的过期做定制化处理,不能同时支持哈希、列表、有序列表等redis数据结构;基于此,本发明实施例提供的一种数据处理方法、装置和电子设备,该技术可以应用于具有数据缓存以及处理功能的设备,比如,手机、笔记本、平板电脑、服务器等设备。为便于对本实施例进行理解,首先对本发明实施例所公开的一种数据处理方法进行详细介绍。
31.首先,本发明实施例提供了一种数据处理方法,预设的计时列表中包括多个依次排列的列表位置;根据列表位置的排列顺序,列表指针每隔预设的时间间隔在计时列表中移动一个列表位置;
32.上述预设的计时列表可以是条形列表,其列表位置的数量可以是以秒为单位的24小时时长对应的数量,也可以是以分钟为单位的24小时时长对应的数量;当然也可以更多或者更少。由于存储时长通常会有秒级,因此上述时间间隔可以为1秒;当然,如果存储时长最小的时间单位为分钟级,则上述时间间隔也可以为1分钟;如果存储时长最小的时间单位为小时级,则上述时间间隔也可以为1小时。
33.如图1所示,该方法包括如下步骤:
34.步骤s102,当向存储空间存储数据时,获取数据的存储时长;
35.上述存储空间可以是各种类型的数据库,包括关系型数据库和非关系型数据库,比如,redis(remote dictionary server,远程字典服务)、ehcache(一种广泛使用的开源java分布式缓存)、memcache(高性能缓存)等;上述存储的数据通常是以缓存的方式存储,因此缓存中的数据会定时过期,上述数据的存储时长即数据的定时过期时长;该时长可以根据数据的类型通过存储空间自动进行设置。上述存储时长可以是3分15秒、1小时2分20秒等。
36.步骤s104,根据存储时长,以及列表指针在计时列表中的当前位置,从计时列表中确定目标列表位置;
37.具体的,可以将数据的存储时长换算为时间间隔的时间单位,根据换算得到的数值,以计时列表中列表指针的当前位置为开始位置,向后移动换算后的数值,最后的列表位置即为目标列表位置。
38.比如,以时间间隔为1秒为例,如果存储时长为30秒,列表指针在计时列表的第2个列表位置,则目标列表的位置可以确定为计时列表的第32个列表位置;再如,如果存储时长为1分30秒,列表指针在计时列表的第6个列表位置,则目标列表的位置可以确定为计时列表的第96个列表位置;还如,如果存储时长为1小时1分30秒,列表指针在计时列表的第20个列表位置,则目标列表的位置可以确定为计时列表的第3710个列表位置。
39.步骤s106,将数据的数据处理事项添加至目标列表位置,以当列表指针移动至目标列表位置时,从存储空间中删除数据。
40.上述数据的数据处理事项可以包括该数据过期的时分秒值和各种类型的指令,比如,删除指令等;另外,上述目标列表位置可以包括多个数据处理事项,在定时任务执行时,列表指针移动至目标列表位置时,会并发执行该子列表中的所有数据处理事项,由于每个删除指令通常只删除存储空间中的一条数据,因此,时间复杂度为1,不会造成存储空间阻塞。具体的,当列表指针移动至目标列表位置时,可以并发执行目标列表位置中的数据处理
事项,按照一定的顺序,从存储空间中删除数据。
41.本发明实施例提供了一种数据处理方法,当向存储空间存储数据时,获取数据的存储时长;根据该存储时长,以及列表指针在计时列表中的当前位置,从计时列表中确定目标列表位置;将数据的数据处理事项添加至目标列表位置,以当列表指针移动至目标列表位置时,从存储空间中删除数据。该方式中,通过建立计时列表的方式,将到达存储时长的数据,根据目标列表位置中数据的数据处理事项,从存储空间中删除,每次删除的数据量较少,避免了批量查询或删除数据的操作,无需消耗较多的内存资源,也不会导致请求阻塞,同时支持多种数据结构的存储和删除,进而提高了清除过期数据的效率以及准确度,提高了数据处理的稳定性。
42.本发明实施例提供了另一种数据处理方法,该方法在上述实施例的基础上实现;本实施例重点描述根据存储时长,以及列表指针在计时列表中的当前位置,从计时列表中确定目标列表位置的步骤的实现过程(通过步骤s204-s206实现);如图2所示,该方法包括如下步骤:
43.步骤s202,当向存储空间存储数据时,获取数据的存储时长;
44.步骤s204,根据存储时长和时间间隔,确定存储时长对应的位置数量;
45.以时间间隔为1秒为例,如果存储时长为30秒,则存储时长对应的位置数量为30;如果存储时长为1分51秒,则存储时长对应的位置数量为111;如果存储时长为1小时20分10秒,则存储时长对应的位置数量为4810。
46.步骤s206,按照列表位置的排列顺序,将列表指针的当前位置之后的第n个的列表位置,确定为目标列表位置;其中,n的值为位置数量;
47.上述列表位置的排列顺序,可以是之字形顺序排列,也可以是弓字形顺序排列,还可以是一字型顺序排列等;在列表指针的当前位置开始,向后数n列表位置,最后以后一个位置,即第n个列表位置,即为目标列表位置。
48.步骤s208,将数据的数据处理事项添加至目标列表位置,以当列表指针移动至目标列表位置时,从存储空间中删除数据。
49.该方式中,通过建立计时列表的方式,将到达存储时长的数据,根据目标列表位置中数据的数据处理事项,从存储空间中删除,每次删除的数据量较少,避免了批量查询或删除数据的操作,无需消耗较多的内存资源,也不会导致请求阻塞,同时支持多种数据结构的存储和删除,进而提高了清除过期数据的效率以及准确度,提高了数据处理的稳定性。
50.本发明实施例提供了另一种数据处理方法,该方法在上述实施例的基础上实现;本实施例重点描述根据存储时长,以及列表指针在计时列表中的当前位置,从计时列表中确定目标列表位置的步骤的实现过程(通过步骤s304-s322实现);
51.其中,计时列表包括多级子列表;每级子列表对应一个计时单位和一个列表指针;多级子列表中,除最低级的子列表外,每级子列表的列表指针的时间间隔等于:下一级子列表的列表指针从下一级子列表的第一个列表位置移动至最后一个列表位置的时长。
52.上述多级子列表可以为环型列表,每个子列表的子列表的位置个数可以根据该子列表对应的计时单位设置;比如,最低级的子列表对应的计时单位为秒,则可以设置每个子列表的列表位置数量为60,或者61等;再如,子列表对应的计时单位为时,则可以设置每个子列表的列表位置数量为24;上述多级子列表可以包括两个、三个、四个等;上述计时单位
可以包括秒、分、时、天、星期、月等;如果最低级的子列表对应的计时单位为秒,则上一级子列表的列表指针的时间间隔可以为60秒;如果最低级的子列表的上一级子列表对应的计时单位为分,则最低级的子列表的上一级子列表的上一级子列表的列表指针的时间间隔可以为60分。
53.需要说明的是,上述计时列表通常是按照时间轮的特性进行设置的。
54.上述多级子列表中,除最高级的子列表外,每级子列表的最后一个列表位置设置有结束标识;结束标识用于:当当前子列表的列表指针到达最后一个列表位置时,将列表指针移动至当前子列表的第一个列表位置。
55.上述设置有结束标识的列表位置,不会再添加任何数据。比如,最低级的子列表设置有61个列表位置,最后一个列表位置设置有结束标识,当当前子列表的列表指针到达最后一个列表位置时,可以指示列表指针移动至当前子列表的第一个列表位置,同时指示当前子列表的上一级子列表的指针向后移动一个列表位置;最高级的子列表没有设置结束标识,其列表指针是以循环的方式在列表位置之间移动,即当最高级的子列表的列表指针移动至最后一个列表位置后,下一级子列表的列表指针达到最后一个列表位置时,最高级的子列表的列表指针自动移动至当前子列表的第一个列表位置。
56.优选的实施方式,计时列表包括三级子列表;最高级的子列表对应的计时单位为时;最高级的子列表的下一级子列表对应的计时单位为分;最低级的子列表对应的计时单位为秒。
57.具体的,可以在服务器中初始化三个单项环型子列表,最低级的子列表可以为秒列表,可以表示为second list,即对应的计时单位为秒;最高级的子列表可以为时列表,可以表示为hour list,即对应的计时单位为时;最高级的子列表的下一级子列表可以为分列表,可以表示为minute list,即对应的计时单位为分;其中,最低级的子列表second list中列表位置的数量可以为61,最高级的子列表的下一级子列表minute list中列表位置的数量可以为61,最高级的子列表hour list中列表位置的数量可以为24。
58.其中,最高级的子列表的列表指针,可以表示为时指针second point;最高级的子列表的下一级子列表的列表指针,可以表示为分指针minute point;最低级的子列表的列表指针可以表示为时指针hour point;在初始化的子列表中,每个列表指针分别指向对应子列表的第一个列表位置。
59.如图3所示,该方法包括如下步骤:
60.步骤s302,当向存储空间存储数据时,获取数据的存储时长;
61.步骤s304,根据存储时长,确定每级子列表对应的计时单位的数量;
62.比如,计时列表包括三级子列表,存储时长为0时0分15秒;可以根据存储时长的时间单位时分秒,确定时单位对应的数值为“0”,分单位对应的数值为“0”,秒单位对应的数值为“15”;可以根据该数值,确定最低级子列表对应的计时单位秒对应的数量为“15”,最低级子列表上一级子列表对应的计时单位分对应的数量为“0”,最高级子列表对应的计时单位时对应的数量为“0”。
63.或者,存储时长为0时3分15秒;可以根据存储时长的时间单位时分秒,确定时单位对应的数值为“0”,分单位对应的数值为“15”,秒单位对应的数值为“15”;可以根据该数值,确定最低级子列表对应的计时单位秒对应的数量为“15”,最低级子列表上一级子列表对应
的计时单位分对应的数量为“3”,最高级子列表对应的计时单位时对应的数量为“0”。
64.或者,存储时长为1时3分15秒;可以根据存储时长的时间单位时分秒,确定时单位对应的数值为“1”,分单位对应的数值为“3”,秒单位对应的数值为“15”;可以根据该数值,确定最低级子列表对应的计时单位秒对应的数量为“15”,最低级子列表上一级子列表对应的计时单位分对应的数量为“3”,最高级子列表对应的计时单位时对应的数量为“1”。
65.再如,计时列表包括四级子列表,存储时长为1天2时3分15秒;可以根据存储时长的时间单位天时分秒,确定天单位对应的数值为“1”,确定时单位对应的数值为“2”,分单位对应的数值为“3”,秒单位对应的数值为“15”;可以根据该数值,确定最低级子列表对应的计时单位秒对应的数量为“15”,最低级子列表上一级子列表对应的计时单位分对应的数量为“3”,最高级子列表下一级子列表对应的计时单位时对应的数量为“2”,最高级子列表对应的计时单位天对应的数量为“1”。
66.步骤s306,从最高级的子列表对应的计时单位开始,查找首个数量不为零的计时单位;
67.比如,计时列表包括三级子列表,存储时长为0时0分15秒;从最高级的子列表对应的计时单位时开始,查找首个数量不为零的计时单位为秒;或者,存储时长为0时3分15秒;从最高级的子列表对应的计时单位时开始,查找首个数量不为零的计时单位为分;或者,存储时长为1时3分15秒;从最高级的子列表对应的计时单位时开始,查找首个数量不为零的计时单位为时;再如,计时列表包括四级子列表,存储时长为1天2时3分15秒;从最高级的子列表对应的计时单位天开始,查找首个数量不为零的计时单位为天。
68.步骤s308,判断首个数量不为零的计时单位对应的子列表,是否为最低级的子列表;如果是,执行步骤s310;如果否,执行步骤s312;
69.步骤s310,根据首个数量不为零的计时单位的数量,以及最低级的子列表的列表指针的当前位置,确定目标列表位置;
70.如果首个数量不为零的计时单位对应的子列表为最低级的子列表,比如,计时列表包括三级子列表,存储时长为0时0分15秒,根据首个数量不为零的计时单位的数量“15”,最低级的子列表的列表指针的当前位置在第3个列表位置,在该位置之后的第15个的列表位置,即最低级的子列表的第18个列表位置,确定为目标列表位置。
71.步骤s312,将首个数量不为零的计时单位的子列表确定为目标子列表;
72.如果首个数量不为零的计时单位对应的子列表不是最低级的子列表,比如,计时列表包括三级子列表,存储时长为0时3分15秒,首个数量不为零的计时单位为分,其对应的子列表为分列表,即最高级的子列表下一级子列表,确定为目标子列表;或者,计时列表包括三级子列表,存储时长为1时3分15秒,首个数量不为零的计时单位为时,其对应的子列表为时列表,即最高级的子列表,确定为目标子列表;再如,计时列表包括四级子列表,存储时长为1天2时3分15秒,首个数量不为零的计时单位为天,其对应的子列表为天列表,即最高级的子列表,确定为目标子列表。
73.步骤s314,根据首个数量不为零的计时单位的数量,以及目标子列表的列表指针的当前位置,从目标子列表中确定临时列表位置;
74.比如,计时列表包括三级子列表,存储时长为0时3分15秒,根据首个数量不为零的计时单位的数量“3”,最高级的子列表下一级子列表,即目标子列表的列表指针的当前位置
为目标子列表的第2个列表位置,在该位置之后的第3个的列表位置,即目标子列表的第5个列表位置,确定为临时列表位置。或者,存储时长为1时3分15秒,根据首个数量不为零的计时单位的数量“1”,最高级的子列表,即目标子列表的列表指针的当前位置为目标子列表的第5个列表位置,在该位置之后的第1个的列表位置,即目标子列表的第6个列表位置,确定为临时列表位置。
75.步骤s316,将数据处理事项添加至临时列表位置,以当目标子列表的列表指针移动至临时列表位置时,将数据处理事项添加至目标子列表的下一级列表中;
76.比如,计时列表包括三级子列表,存储时长为0时3分15秒,上述数据处理事项包括数据过期的时分秒对应的数量和事项指令;当目标子列表,即分列表的列表指针移动至临时列表位置时,说明时间已经过去了3分钟,此时,需要将该临时列表位置的数据处理事项添加至目标子列表的下一级子列表,即最低级的子列表中;或者,存储时长为4时3分15秒,上述数据处理事项包括数据过期的时分秒对应的数量和事项指令;当目标子列表,即最高级的子列表的列表指针移动至临时列表位置时,说明时间已经过去了4小时,此时,需要将该临时列表位置的数据处理事项添加至目标子列表的下一级子列表中,即分列表中。
77.需要说明的是,存储时长的时分秒逢整数时不进位,比如存储时长诶2分钟的数据,应标示为0时1分60秒,而非0时2分0秒;
78.步骤s318,当目标子列表的列表指针移动至临时列表位置时,判断目标子列表的下一级子列表是否是最低级的子列表;如果是,执行步骤s320;如果否,执行步骤s322;
79.步骤s320,根据最低级的子列表的计时单位的数量,确定目标列表位置;
80.当目标子列表的列表指针移动至临时列表位置时,如果目标子列表的下一级子列表是最低级的子列表,根据最低级的子列表的计时单位的数量,确定目标列表位置;比如,计时列表包括三级子列表,存储时长为0时3分15秒,当目标子列表,即分列表的列表指针移动至临时列表位置时,将该临时列表位置的数据处理事项添加至目标子列表的下一级子列表,即最低级的子列表,根据最低级的子列表的计时单位的数量“15”,定目标列表位置,即最低级的子列表的目标列表位置为最低级的子列表的第15个列表位置。
81.步骤s322,根据下一级子列表的计时单位的数量,以及下一级子列表的列表指针的当前位置,从下一级子列表中确定更新的临时列表位置;将数据处理事项添加至更新的临时列表位置,以当下一级子列表的列表指针移动至更新的临时列表位置时,将数据处理事项添加至下一级列表的下一级列表中,直至到达最低级的子列表;
82.当目标子列表的列表指针移动至临时列表位置时,如果目标子列表的下一级子列表不是最低级的子列表;比如,计时列表包括三级子列表,存储时长为4时3分15秒,当目标子列表,即最高级的列表的列表指针移动至临时列表位置时,将该临时列表位置的数据处理事项添加至目标子列表的下一级子列表,该下一级子列表的计时单位的数量为“3”,下一级子列表的列表指针的当前位置为第5个列表位置,在该位置之后的第3个的列表位置,即该子列表的第8个列表位置,确定为更新的临时列表位置,同时将数据处理事项添加至更新的临时列表位置;当下一级子列表的列表指针移动至更新的临时列表位置时,将该更新临时列表位置的数据处理事项添加至最低级的子列表中;根据最低级的子列表的计时单位的数量“15”,将最低级的子列表的第15个列表位置确定目标列表位置。
83.需要说明的是,当计时列表包括的子列表在两个及两个以上时,在执行计时任务
时,当目标子列表的列表指针移动至临时列表位置或目标列表位置后,其列表指针会继续指向该子列表的下一个列表位置,如果下一个列表位置没有设置结束标识,则本次计时任务完毕;如果下一个列表位置设置有结束标识,则该子列表的列表指针继续回到该子列表的第一个列表位置。
84.步骤s324,将数据的数据处理事项添加至目标列表位置,当列表指针移动至目标列表位置时,执行数据处理事项中的删除指令,以从存储空间中删除数据。
85.上述目标列表位置通常是指最低级的子列表的目标列表位置;上述数据的数据处理事项包括删除指令,该删除指令通常只删除存储空间中的一条数据;另外,上述目标列表位置可以包括多个数据处理事项,在定时任务执行时,列表指针移动至目标列表位置时,会并发执行该子列表中的所有数据处理事项,由于每个删除指令通常只删除存储空间中的一条数据,因此,时间复杂度为1,不会造成存储空间阻塞。
86.需要说明的是,上述临时列表位置、以及更新的临时列表位置都可以包括多个数据处理事项,在定时任务执行时,列表指针移动至该列表位置时,都会并发执行该子列表中的所有数据处理事项,执行的动作通常是将该数据处理事项添加至下一级子列表中。
87.以存储空间为redis为例,对于程序来说是并发执行数据处理事项,但是到了redis后,由于redis是单线程的,在收到每个删除指令后是顺序执行每个指令;而阻塞通常是针对单条指令而言,如果通过多条指令删除数据,通常不会发生阻塞。
88.该方式中,计时列表包括多级子列表,根据存储时长,确定每级子列表对应的计时单位对应的数量;从最高级的子列表对应的计时单位开始,查找首个数量不为零的计时单位;如果首个数量不为零的计时单位对应的子列表,是最低级的子列表,根据首个数量不为零的计时单位的数量,以及最低级的子列表的列表指针的当前位置,确定目标列表位置;当列表指针移动至目标列表位置时,执行数据处理事项中的删除指令,以从存储空间中删除数据。该方式在清理数据过程中避免了批量查询或删除数据的操作导致redis阻塞的问题,同时避免了全量遍历,仅处理到期的数据,还可同时支持多种数据结构的存储和删除,通过建立多级子列表的方式,减少了存储空间中内存资源的占用,进而提高了清除过期数据的效率以及准确度,提高了数据处理的稳定性。
89.对应上述方法实施例,本实施例提供了一种数据处理装置,预设的计时列表中包括多个依次排列的列表位置;根据列表位置的排列顺序,列表指针每隔预设的时间间隔在计时列表中移动一个列表位置;
90.如图4所示,该装置包括:
91.获取模块41,用于当向存储空间存储数据时,获取数据的存储时长;
92.确定模块42,用于根据存储时长,以及列表指针在计时列表中的当前位置,从计时列表中确定目标列表位置;
93.删除模块43,用于将数据的数据处理事项添加至目标列表位置,以当列表指针移动至目标列表位置时,从存储空间中删除数据。
94.本发明实施例提供了一种数据处理装置,当向存储空间存储数据时,获取数据的存储时长;根据该存储时长,以及列表指针在计时列表中的当前位置,从计时列表中确定目标列表位置;将数据的数据处理事项添加至目标列表位置,以当列表指针移动至目标列表位置时,从存储空间中删除数据。该方式中,通过建立计时列表的方式,将到达存储时长的
数据,根据目标列表位置中数据的数据处理事项,从存储空间中删除,每次删除的数据量较少,避免了批量查询或删除数据的操作,无需消耗较多的内存资源,也不会导致请求阻塞,同时支持多种数据结构的存储和删除,进而提高了清除过期数据的效率以及准确度,提高了数据处理的稳定性。
95.进一步的,上述确定模块还用于:根据存储时长和时间间隔,确定存储时长对应的位置数量;按照列表位置的排列顺序,将列表指针的当前位置之后的第n个的列表位置,确定为目标列表位置;其中,n的值为位置数量。
96.进一步的,计时列表包括多级子列表;每级子列表对应一个计时单位和一个列表指针;多级子列表中,除最低级的子列表外,每级子列表的列表指针的时间间隔等于:下一级子列表的列表指针从下一级子列表的第一个列表位置移动至最后一个列表位置的时长;上述确定模块还用于:根据存储时长,确定每级子列表对应的计时单位的数量;从最高级的子列表对应的计时单位开始,查找首个数量不为零的计时单位;如果首个数量不为零的计时单位对应的子列表,是最低级的子列表,根据首个数量不为零的计时单位的数量,以及最低级的子列表的列表指针的当前位置,确定目标列表位置。
97.进一步的,上述装置还用于:如果首个数量不为零的计时单位对应的子列表,不是最低级的子列表,将首个数量不为零的计时单位的子列表确定为目标子列表;根据首个数量不为零的计时单位的数量,以及目标子列表的列表指针的当前位置,从目标子列表中确定临时列表位置;将数据处理事项添加至临时列表位置,以当目标子列表的列表指针移动至临时列表位置时,将数据处理事项添加至目标子列表的下一级列表中。
98.进一步的,上述装置还用于:当目标子列表的列表指针移动至临时列表位置时,判断目标子列表的下一级子列表是否是最低级的子列表;如果不是最低级的子列表,根据下一级子列表的计时单位的数量,以及下一级子列表的列表指针的当前位置,从下一级子列表中确定更新的临时列表位置;将数据处理事项添加至更新的临时列表位置,以当下一级子列表的列表指针移动至更新的临时列表位置时,将数据处理事项添加至下一级列表的下一级列表中,直至到达最低级的子列表;如果是最低级的子列表,根据最低级的子列表的计时单位的数量,确定目标列表位置。
99.进一步的,上述多级子列表中,除最高级的子列表外,每级子列表的最后一个列表位置设置有结束标识;结束标识用于:当当前子列表的列表指针到达最后一个列表位置时,将列表指针移动至当前子列表的第一个列表位置。
100.进一步的,上述计时列表包括三级子列表;最高级的子列表对应的计时单位为时;最高级的子列表的下一级子列表对应的计时单位为分;最低级的子列表对应的计时单位为秒。
101.进一步的,上述数据处理事项包括针对数据的删除指令;上述删除模块还用于:当列表指针移动至目标列表位置时,执行数据处理事项中的删除指令,以从存储空间中删除数据。
102.本发明实施例提供的数据处理装置,与上述实施例提供的数据处理方法具有相同的技术特征,所以也能解决相同的技术问题,达到相同的技术效果。
103.本发明实施例还提供了一种电子设备,参见图5所示,该电子设备包括处理器90和存储器91,该存储器91存储有能够被处理器90执行的机器可执行指令,该处理器90执行机
器可执行指令以实现上述数据处理方法。
104.进一步地,图5所示的电子设备还包括总线92和通信接口93,处理器90、通信接口93和存储器91通过总线92连接。
105.其中,存储器91可能包含高速随机存取存储器(ram,random access memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口93(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线92可以是isa总线、pci总线或eisa总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
106.处理器90可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器90中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器90可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(digital signal processor,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现场可编程门阵列(field-programmable gate array,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器91,处理器90读取存储器91中的信息,结合其硬件完成前述实施例的方法的步骤。
107.本发明实施例还提供了一种机器可读存储介质,该机器可读存储介质存储有机器可执行指令,该机器可执行指令在被处理器调用和执行时,该机器可执行指令促使处理器实现上述数据处理方法,具体实现可参见方法实施例,在此不再赘述。
108.本发明实施例所提供的数据处理方法、装置和电子设备的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
109.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
110.另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
111.所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个
人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
112.在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
113.最后应说明的是:以上实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
技术特征:
1.一种数据处理方法,其特征在于,预设的计时列表中包括多个依次排列的列表位置;根据所述列表位置的排列顺序,列表指针每隔预设的时间间隔在所述计时列表中移动一个列表位置;所述方法包括:当向存储空间存储数据时,获取所述数据的存储时长;根据所述存储时长,以及所述列表指针在所述计时列表中的当前位置,从所述计时列表中确定目标列表位置;将所述数据的数据处理事项添加至所述目标列表位置,以当所述列表指针移动至所述目标列表位置时,从所述存储空间中删除所述数据。2.根据权利要求1所述的方法,其特征在于,根据所述存储时长,以及所述列表指针在所述计时列表中的当前位置,从所述计时列表中确定目标列表位置的步骤,包括:根据所述存储时长和所述时间间隔,确定所述存储时长对应的位置数量;按照所述列表位置的排列顺序,将所述列表指针的当前位置之后的第n个的列表位置,确定为目标列表位置;其中,所述n的值为所述位置数量。3.根据权利要求1所述的方法,其特征在于,所述计时列表包括多级子列表;每级所述子列表对应一个计时单位和一个列表指针;所述多级子列表中,除最低级的子列表外,每级子列表的列表指针的时间间隔等于:下一级子列表的列表指针从所述下一级子列表的第一个列表位置移动至最后一个列表位置的时长;所述根据所述存储时长,以及所述列表指针在所述计时列表中的当前位置,从所述计时列表中确定目标列表位置的步骤,包括:根据所述存储时长,确定每级所述子列表对应的计时单位的数量;从最高级的子列表对应的计时单位开始,查找首个数量不为零的计时单位;如果所述首个数量不为零的计时单位对应的子列表,是最低级的子列表,根据所述首个数量不为零的计时单位的数量,以及所述最低级的子列表的列表指针的当前位置,确定目标列表位置。4.根据权利要求3所述的方法,其特征在于,所述方法还包括:如果所述首个数量不为零的计时单位对应的子列表,不是最低级的子列表,将所述首个数量不为零的计时单位的子列表确定为目标子列表;根据所述首个数量不为零的计时单位的数量,以及所述目标子列表的列表指针的当前位置,从所述目标子列表中确定临时列表位置;将所述数据处理事项添加至所述临时列表位置,以当所述目标子列表的列表指针移动至所述临时列表位置时,将所述数据处理事项添加至所述目标子列表的下一级列表中。5.根据权利要求4所述的方法,其特征在于,将所述数据处理事项添加至所述临时列表位置的步骤之后,所述方法还包括:当所述目标子列表的列表指针移动至所述临时列表位置时,判断所述目标子列表的下一级子列表是否是最低级的子列表;如果不是最低级的子列表,根据所述下一级子列表的计时单位的数量,以及所述下一级子列表的列表指针的当前位置,从所述下一级子列表中确定更新的临时列表位置;将所述数据处理事项添加至所述更新的临时列表位置,以当所述下一级子列表的列表指针移动至所述更新的临时列表位置时,将所述数据处理事项添加至所述下一级列表的下一级列表
中,直至到达最低级的子列表;如果是最低级的子列表,根据所述最低级的子列表的计时单位的数量,确定目标列表位置。6.根据权利要求3所述的方法,其特征在于,所述多级子列表中,除最高级的子列表外,每级子列表的最后一个列表位置设置有结束标识;所述结束标识用于:当当前子列表的列表指针到达所述最后一个列表位置时,将所述列表指针移动至所述当前子列表的第一个列表位置。7.根据权利要求3所述的方法,其特征在于,所述计时列表包括三级子列表;最高级的子列表对应的计时单位为时;所述最高级的子列表的下一级子列表对应的计时单位为分;最低级的子列表对应的计时单位为秒。8.根据权利要求1-7任一项所述的方法,其特征在于,所述数据处理事项包括针对所述数据的删除指令;所述当所述列表指针移动至所述目标列表位置时,从所述存储空间中删除所述数据的步骤,包括:当所述列表指针移动至所述目标列表位置时,执行所述数据处理事项中的删除指令,以从所述存储空间中删除所述数据。9.一种数据处理装置,其特征在于,预设的计时列表中包括多个依次排列的列表位置;根据所述列表位置的排列顺序,列表指针每隔预设的时间间隔在所述计时列表中移动一个列表位置;所述装置包括:获取模块,用于当向存储空间存储数据时,获取所述数据的存储时长;确定模块,用于根据所述存储时长,以及所述列表指针在所述计时列表中的当前位置,从所述计时列表中确定目标列表位置;删除模块,用于将所述数据的数据处理事项添加至所述目标列表位置,以当所述列表指针移动至所述目标列表位置时,从所述存储空间中删除所述数据。10.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的机器可执行指令,所述处理器执行所述机器可执行指令以实现权利要求1至8任一项所述的数据处理方法。11.一种机器可读存储介质,其特征在于,所述机器可读存储介质存储有机器可执行指令,所述机器可执行指令在被处理器调用和执行时,所述机器可执行指令促使所述处理器实现权利要求1至8任一项所述的数据处理方法。
技术总结
本发明提供了一种数据处理方法、装置和电子设备,当向存储空间存储数据时,获取数据的存储时长;根据该存储时长,以及列表指针在计时列表中的当前位置,从计时列表中确定目标列表位置;将数据的数据处理事项添加至目标列表位置,以当列表指针移动至目标列表位置时,从存储空间中删除数据。该方式中,通过建立计时列表的方式,将到达存储时长的数据,根据目标列表位置中数据的数据处理事项,从存储空间中删除,每次删除的数据量较少,避免了批量查询或删除数据的操作,无需消耗较多的内存资源,也不会导致请求阻塞,同时支持多种数据结构的存储和删除,进而提高了清除过期数据的效率以及准确度,提高了数据处理的稳定性。提高了数据处理的稳定性。提高了数据处理的稳定性。
技术研发人员:汤爱迪
受保护的技术使用者:北京金山云网络技术有限公司
技术研发日:2020.09.08
技术公布日:2022/3/7