CN108509592A - 基于Redis的数据存储方法、读取方法及装置 - Google Patents

基于Redis的数据存储方法、读取方法及装置 Download PDF

Info

Publication number
CN108509592A
CN108509592A CN201810274998.2A CN201810274998A CN108509592A CN 108509592 A CN108509592 A CN 108509592A CN 201810274998 A CN201810274998 A CN 201810274998A CN 108509592 A CN108509592 A CN 108509592A
Authority
CN
China
Prior art keywords
value
data
offset
data segment
current
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
Application number
CN201810274998.2A
Other languages
English (en)
Other versions
CN108509592B (zh
Inventor
韦吉云
李晓鹏
张云
杨阳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guiyang Longmaster Information and Technology Co ltd
Original Assignee
Guiyang Longmaster Information and Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Guiyang Longmaster Information and Technology Co ltd filed Critical Guiyang Longmaster Information and Technology Co ltd
Priority to CN201810274998.2A priority Critical patent/CN108509592B/zh
Publication of CN108509592A publication Critical patent/CN108509592A/zh
Application granted granted Critical
Publication of CN108509592B publication Critical patent/CN108509592B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Complex Calculations (AREA)

Abstract

本发明属于数据存储技术领域,具体涉及到基于Redis的数据存储方法、读取方法及装置。该数据存储方法包括:设置第Ⅰ单位时间ts的值,并设置该第Ⅰ单位时间内统计数据的最大值;将位图划分成m个连续的有一定位宽的数据段;读取统计数据过程中当前时间的时间戳ct,并根据fn=[(ct‑st)/ts]*L+LS+LT,计算得出统计数据过程中当前时间的时间戳ct对应的偏移量fn;根据计算得出的偏移量fn,将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量fn对应的数据段内的数值上等。该存储方法可用于对大量统计数据的实时存储等。

Description

基于Redis的数据存储方法、读取方法及装置
技术领域
本发明属于数据存储技术领域,具体涉及到基于Redis的数据存储方法、读取方法及装置。
背景技术
现有技术中,对统计数据的存储采用的是单文件存储或者多文件存储。使用单文件存储:文件占用空间增长速度快,海量数据检索不方便,Map/Reduce操作也麻烦;使用多文件存储:需要对文件进行分割,文件量过大。无论是单文件存储还是多文件存储,都存在文件占用空间较大、读取或检索数据不方便等问题。
发明内容
为了解决上述技术问题,本发明提供基于Redis的数据存储方法、读取方法及装置,该存储方法可用于对大量统计数据的实时存储等,其占用存储空间小、存储位置与时间相关联、存储效率高、更方便后续的读取。
本发明提供如下技术方案:
一方面,本发明实施例中提供一种基于Redis的数据存储方法,其包括以下步骤:
设置第Ⅰ单位时间ts的值,并设置该第Ⅰ单位时间内统计数据的最大值;
将位图划分成m个连续的有一定位宽的数据段;m为大于或等于3的整数;其中,第一个数据段的位宽为LS,第二个数据段的位宽为LT;第一个数据段的偏移量f1为0,第二个数据段的偏移量f2为LS,第n个数据段的偏移量fn=[(ct-st)/ts]*L+LS+LT;其中,L为第三个及其之后的数据段的位宽,且L为大于或等于1的整数,且位宽为L的数据段可存取的最大数据大于或等于所述第Ⅰ单位时间内统计数据的最大值;ct为统计数据过程中当前时间的时间戳,且ct是随时间变化而变化的,st为统计数据开始时间的时间戳,ct≥st,ct、st、ts的时间单位一致,且(ct-st)/ts为向下整除运算,n为大于或等于3的整数;
读取统计数据开始时间的时间戳st,并将统计开始时间的时间戳st的二进制数据存储到与偏移量f1对应的数据段内;
读取统计数据过程中当前时间的时间戳ct,并根据fn=[(ct-st)/ts]*L+LS+LT,计算得出统计数据过程中当前时间的时间戳ct对应的偏移量fn;
根据计算得出的偏移量fn,将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量fn对应的数据段内的数值上;
将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量f2对应的数据段内的数值上。
本发明还提供一种基于Redis的数据读取方法,其包括以下步骤:
S101:确定位图中需要提取的数据所处的时间的时间戳at;
S102:判断at是否小于st或者at是否大于所述位图中偏移量最大的数据段对应的时间,st为统计数据开始时间的时间戳;
S103:如果at小于st或者at大于所述位图中偏移量最大的数据段对应的时间,则读取的值为0;
S104:如果at不小于st,且at不大于所述位图中偏移量最大的数据段对应的时间,则根据所述需要提取的数据所处的时间的时间戳at获取所述位图中第n个数据段的偏移量fn,fn=[(at-st)/ts]*L+LS+LT,其中,LS为所述位图的第一个数据段的位宽,LT为所述位图的第二个数据段的位宽,L为第三个及其之后的数据段的位宽,ts位所述位图的第Ⅰ单位时间,at、st、ts的时间单位一致,且(at-st)/ts为向下整除运算,n为大于或等于3的整数;
S105:读取在偏移量fn处的数据段的值dn。
本发明还提供另一种基于Redis的数据读取方法,其包括以下步骤:
获取位图中第二个数据段的偏移量f2的值;
根据偏移量f2的值,查找到与偏移量f2对应的数据段;
读取与偏移量f2对应的数据段内的统计数据。
本发明还提供一种基于Redis的数据存储装置,其包括:
预测模块,用于设置第Ⅰ单位时间ts的值,并设置该第Ⅰ单位时间内统计数据的最大值;
划分模块,用于将位图划分成m个连续的有一定位宽的数据段;m为大于或等于3的整数;其中,第一个数据段的位宽为LS,第二个数据段的位宽为LT;第一个数据段的偏移量f1为0,第二个数据段的偏移量f2为LS,第n个数据段的偏移量fn=[(ct-st)/ts]*L+LS+LT;其中,L为第三个及其之后的数据段的位宽,且L为大于或等于1的整数,且位宽为L的数据段可存取的最大数据大于或等于所述第Ⅰ单位时间内统计数据的最大值;ct为统计数据过程中当前时间的时间戳,且ct是随时间变化而变化的,st为统计数据开始时间的时间戳,ct≥st,ct、st、ts的时间单位一致,且(ct-st)/ts为向下整除运算,n为大于或等于3的整数;
存储模块,用于读取统计数据开始时间的时间戳st,并将统计开始时间的时间戳st的二进制数据存储到与偏移量f1对应的数据段内;
第一计算模块,用于读取统计数据过程中当前时间的时间戳ct,并根据fn=[(ct-st)/ts]*L+LS+LT,计算得出统计数据过程中当前时间的时间戳ct对应的偏移量fn;
第一累加模块,用于根据计算得出的偏移量fn,将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量fn对应的数据段内的数值上;
第二累加模块,用于将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量f2对应的数据段内的数值上。本发明还提供一种基于Redis的数据读取装置,其包括:
确定模块,用于确定位图中需要提取的数据所处的时间的时间戳at;
第一判断模块,用于用于判断at是否小于st或者at是否大于所述位图中偏移量最大的数据段对应的时间,st为统计数据开始时间的时间戳;
第一读取模块,用于如果at小于st或者at大于所述位图中偏移量最大的数据段对应的时间,则读取的值为0;
获取模块,用于如果at不小于st,且at不大于所述位图中偏移量最大的数据段对应的时间,则根据所述需要提取的数据所处的时间的时间戳at获取所述位图中第n个数据段的偏移量fn,fn=[(at-st)/ts]*L+LS+LT,其中,LS为所述位图的第一个数据段的位宽,LT为所述位图的第二个数据段的位宽,L为第三个及其之后的数据段的位宽,ts位所述位图的第Ⅰ单位时间,at、st、ts的时间单位一致,且(at-st)/ts为向下整除运算,n为大于或等于3的整数;
第二读取模块,用于读取在偏移量fn处的数据段的值dn。
本发明还提供另一种基于Redis的数据读取装置,其包括:
得到模块,用于获取位图中第二个数据段的偏移量f2的值;
查找模块,用于根据偏移量f2的值,查找到与偏移量f2对应的数据段;
数据模块,用于读取与偏移量f2对应的数据段内的统计数据。
本发明实施例的基于Redis的数据存储方法,通过对位图进行划分成若干个数据段,并将数据段的位置(偏移量)与统计时间进行相关,即通过fn=[(ct-st)/ts]*L+LS+LT计算某一时刻对应的偏移量,可以高效地、实时地将统计数据存储到位图中对应的位置内。此过程中剔除了所有不关心的数据,而且除了起始时间,其他时间数据也被消除,不用存储;除了一些需要预留的数据空间,没有其他冗余数据。因此相比于传统的数据库存储,节省了很多的存储空间(仅512M的存储空间就可以满足一项数据近万年的统计需求)。冗余数据少就意味着需要处理的额外数据也少,而且Bitmap可以有效利用硬件中的位级并行机制来快速、高效地执行运算操作。因此相比于传统的数据库统计方式,有着更高的效率。另外,该方式可以更轻松、高效地实现统计数据的实时处理。因此,本发明实施例的基于Redis的数据存储方法有着能够实时存储、占用存储空间小、存储位置与时间相关联、存储效率高、更方便后续的读取等优点。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对本发明或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一优选实施例中的基于Redis的数据存储方法的流程图。
图2为本发明一优选实施例中的位图的结构图示。
图3为本发明一优选实施例中的基于Redis的数据读取方法的流程图。
图4为本发明另一优选实施例中的基于Redis的数据读取方法的流程图。
图5为本发明一优选实施例中的基于Redis的数据存储装置的结构图。
图6为本发明一优选实施例中的基于Redis的数据读取装置的结构图。
图7为本发明另一优选实施例中的基于Redis的数据读取装置的结构图。
图8为本发明又一优选实施例中的基于Redis的数据读取装置的结构图。
具体实施方式
下面将结合本发明中的附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本发明实施例中的“第一”、“第二”、“第三”,只是对某些特征进行区别性地称呼,这是为了方便理解设定的,并无其他方面的限定。
Redis是一个开源的内存存储的数据结构存储系统,其支持字符串、哈希表、集合、位图(Bitmap)等数据类型。Redis可用作数据库,可以进行高速缓存和消息队列代理。Bitmap(位图)是存储一组连续的二进制数字(0或1)的数组数据结构,是一种常用的数据结构,在索引、数据压缩等方面有广泛应用。Redis支持存储Bitmap类型的数据,并提供相应的命令用于高效地操作Bitmap,如:SETBIT命令、BITOP命令、BITFIELD命令等,其中BITFIELD命令能够处理Bitmap上不同位宽和任意非对齐偏移的特定整数字段。
本发明的主要思想是,统计数据以Bitmap(位图)数据类型为值(Value)存储,而其键(Key)中包含统计项目的名称或者标识符,以便根据名称或标识符找到统计数据。然后将Bitmap划分成若干个连续的有固定长度的字段(Field,即数据段),每一字段内存储相应统计信息(如统计开始时间、当前统计数据的总量和某一时间内的统计数据)的二进制数据。字段的偏移量(offset,即字段的起始位置)与时间相关系,可以根据时间信息精确定位字段。
如图1所示的基于Redis的数据存储方法,其包括以下步骤:
S201:设置第Ⅰ单位时间ts的值,并设置该第Ⅰ单位时间内统计数据的最大值。
第Ⅰ单位时间ts的值,是按统计数据的精确度来取值。比如:若需要精确统计到小时,则第Ⅰ单位时间ts的值可以取1小时,即从统计的起始时间开始,将每1小时内的数据进行累积统计到一个数据段内;若需要精确统计到1分钟,则第Ⅰ单位时间ts的值可以取1分钟,即从统计的起始时间开始,将每1分钟内的数据进行累积统计到一个数据段内;若需要精确统计到1天,则第Ⅰ单位时间ts的值可以取1天,即从统计的起始时间开始,将每1天内的数据进行累积统计到一个数据段内。第Ⅰ单位时间ts取值越小,统计记录的细节就越多。如果当前时间是在整个统计数据过程中的某个时间段(每个时间段的时间大小是第Ⅰ单位时间)内的话,统计数据就会合并到该时间段对应偏移量的数据段里。
所述设置该第Ⅰ单位时间内统计数据的最大值,可以是根据已预测该第Ⅰ单位时间内统计数据的最大值进行设置。预测该第Ⅰ单位时间内统计数据的最大值,可以根据往常的统计记录进行预测,或许是用户根据经验预测的第Ⅰ单位时间内统计数据的最大值。
S202:将位图划分成m个连续的有一定位宽的数据段;m为大于或等于3的整数;其中,第一个数据段的位宽为LS,第二个数据段的位宽为LT;第一个数据段的偏移量f1为0,第二个数据段的偏移量f2为LS,第n个数据段的偏移量fn=[(ct-st)/ts]*L+LS+LT;其中,L为第三个及其之后的数据段的位宽,且L为大于或等于1的整数,且位宽为L的数据段可存取的最大数据大于或等于所述第Ⅰ单位时间内统计数据的最大值;ct为统计数据过程中当前时间的时间戳,且ct是随时间变化而变化的,st为统计数据开始时间的时间戳,ct≥st,ct、st、ts的时间单位一致,且(ct-st)/ts为向下整除运算,n为大于或等于3的整数。
所述第一个数据段的位宽LS和第二个数据段的位宽LT,通常取较大的值,比如LS和LT可以均为64位,这是由于第一个数据段是为了存储统计开始时间的时间戳st,第二个数据段的是为了存储统计的总值,它们的数值较大,通常需要较多的位数进行存储。当然,根据需要,LS、LT也可以取其他位数。所述位宽L,通常需要根据第Ⅰ单位时间内统计数值的大小而定,数据段内内最大的数值必须大于或等于可能出现的第Ⅰ单位时间内统计数据的最大值。例如:数据类型为无符号整型,第Ⅰ单位时间统计数据的最大值绝对不会大于1000时,位宽L可以取10位,因为位宽为10位的无符号整型能表示的最大值是1023(2^10-1)。
所述偏移量是位图中的某个数据段的起始位置距离第一数据段的起始位置的距离,即是该数据段在该位图中的具体位置。例如:如图2所示的位图,此时,LS、LT和L的值均为10位,该位图已划分成4个数据段,第一个数据段的起始位置距离第一数据段的起始位置的距离为0,即第一个数据段的偏移量f1是0;第二个数据段的起始位置距离第一数据段的起始位置的距离为10位(即是1LS),即第二个数据段的偏移量f2是10;第三个数据段的起始位置距离第一数据段的起始位置的距离为20位(即是LS+LT),即第三个数据段的偏移量f3是20;第四个数据段的起始位置距离第一数据段的起始位置的距离为30位(即是LS+LT+L),即第三个数据段的偏移量f4是30。
数据段的起始位置是指该数据段内第一个数据的位置。
第n个数据段的偏移量fn=[(ct-st)/ts]*L+L,即计算数据段的偏移量时,可以根据当前时间进行计算。例如:第Ⅰ单位时间ts的值为1小时,即3600秒;L=10,LS=LT=64;统计数据的开始时间是2018年3月10日00:00:00,即统计数据开始时间的时间戳st=1520611200秒,统计数据过程中当前时间的时间戳ct为1520616600(即为2018年3月10日01:30:00),则与当前时间的时间戳ct对应的数据段的偏移量为fn=[(ct-st)/ts]*L+LS+LT=[(1520616600-1520611200)/3600]*10+64+64=138;其中[(1520616600-1520611200)/3600]为向下整除运算,即为1。
本发明实施例中ct≥st。即本发明实施例的每个数据段对应的时间段中包含时间段的最小值。比如:第Ⅰ单位时间ts的值为1小时,统计数据的开始时间是2018年3月10日00:00:00,时间段2018年3月10日的00:00:00至01:00:00对应第3个数据段、时间段2018年3月10日的01:00:00至02:00:00对应第4个数据段、时间段2018年3月10日的02:00:00至03:00:00对应第5个数据段等,其中,通过01:00:00这个时间点计算得到的数据段在第4个数据段(而不是第3个数据段),通过02:00:00这个时间点计算得到的数据段在第5个数据段(而不是第4个数据段),通过03:00:00这个时间点计算得到的数据段在第6个数据段(而不是第5个数据段)。
S203:读取统计数据开始时间的时间戳st,并将统计开始时间的时间戳st的二进制数据存储到与偏移量f1对应的数据段内。
位图中的第一个数据段通常是存储统计数据开始时间的时间戳。
S204:读取统计数据过程中当前时间的时间戳ct,并根据fn=[(ct-st)/ts]*L+LS+LT,计算得出统计数据过程中当前时间的时间戳ct对应的偏移量fn。
S205:根据计算得出的偏移量fn,将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量fn对应的数据段内的数值上。
本发明实施例中,n的值表示数据段的序数,比如n为3时,是指第3个数据段,f3即为第3个数据段的偏移量;n为4时,是指第4个数据段,f4即为第4个数据段的偏移量。
S206:将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量f2对应的数据段内的数值上。
例如:为了统计用户对某网站的点击量,当监听到用户点击一次该网站时,则可以将该次点击累加到当前时间对应的数据段内的数值上;如果当前时间的时间戳ct对应的fn=138,当前时间的时间戳ct对应的当前统计数值v为1次,而偏移量为138的数据段的数据已经有100次,则将当前时间的时间戳ct对应的当前统计数值v为1次累加到该数据段内的数值上,结果偏移量为138的数据段的数据累计为101次。
将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量f2对应的数据段内的数值上,即是每次其他数据段内的统计数据增加时,都会把增加的值累加到与偏移量f2对应的数据段内的数值上,这样与偏移量f2对应的数据段内的数据就是统计数据的总值。如果后期只需要读取总值,则不需要读取每个数据段内的值,直接读取该数据段内的值即可。
本发明实施例的基于Redis的数据存储方法,通过对位图进行划分成若干个数据段,并将数据段的位置(偏移量)与统计时间进行相关,即通过fn=[(ct-st)/ts]*L+LS+LT计算某一时刻对应的偏移量,可以高效地、实时地将统计数据存储到位图中对应的位置内。此过程中剔除了所有不关心的数据,而且除了起始时间,其他时间数据也被消除,不用存储;除了一些需要预留的数据空间,没有其他冗余数据。因此相比于传统的数据库存储,节省了很多的存储空间(仅512M的存储空间就可以满足一项数据近万年的统计需求)。冗余数据少就意味着需要处理的额外数据也少,而且Bitmap可以有效利用硬件中的位级并行机制来快速、高效地执行运算操作。因此相比于传统的数据库统计方式,有着更高的效率。另外,该方式可以更轻松、高效地实现统计数据的实时处理。因此,本发明实施例的基于Redis的数据存储方法有着占用存储空间小、效率高、实时存取等优点。
基于图1所述的基于Redis的数据存储方法,其中,所述将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量fn对应的数据段内的数值上,包括以下步骤:
S2051:根据n=(ct-st)/ts+3,计算出当前n的值,并将当前n的值与当前m的值进行比较;
S2052:如果当前n的值小于或等于当前m的值,则将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量fn对应的数据段内的数值上;
S2053:如果当前n的值大于当前m的值,则将位图扩展成具有h个一定位宽的数据段,其中,新扩增的数据段的位宽为L,h的值大于或等于n的值;并将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量fn对应的数据段内的数值上。
本发明实施例的基于Redis的数据存储方法中,当位图划分的数据段不足够使用时,可以自动进行扩展数据段。
如图3所示的基于Redis的数据读取方法,其包括以下步骤:
S101:确定位图中需要提取的数据所处的时间的时间戳at;
S102:判断at是否小于st或者at是否大于所述位图中偏移量最大的数据段对应的时间,st为统计数据开始时间的时间戳;
S103:如果at小于st或者at大于所述位图中偏移量最大的数据段对应的时间,则读取的值为0;
S104:如果at不小于st,且at不大于所述位图中偏移量最大的数据段对应的时间,则根据所述需要提取的数据所处的时间的时间戳at获取所述位图中第n个数据段的偏移量fn,fn=[(at-st)/ts]*L+LS+LT,其中,LS为所述位图的第一个数据段的位宽,LT为所述位图的第二个数据段的位宽,L为第三个及其之后的数据段的位宽,ts位所述位图的第Ⅰ单位时间,at、st、ts的时间单位一致,且(at-st)/ts为向下整除运算,n为大于或等于3的整数;
S105:读取在偏移量fn处的数据段的值dn。
所述判断at是否小于st或者at是否大于所述位图中偏移量最大的数据段对应的时间之前,还包括:获取st的值和所述位图中偏移量最大的数据段对应的时间。所述获取st的值,可以通过读取位图中第一个数据段的数值获得;获取所述位图中偏移量最大的数据段对应的时间,可以通过获取统计数据过程中的最后一次将统计数值v的二进制数据累加到对应的数据段内的数值上时的时间获得。
所述位图中偏移量最大的数据段对应的时间,一般是位图中偏移量最大的数据段对应的时间段中的最大时间点。
本发明实施例的读取方法可以读取如图1所示的存储方法存储的数据。该读取方法可以根据具体的时间进行快速、高效、精准地读取所需要的存储数据。
具体地,如果想要读取某个数据段内的数据,则可以先确定该数据段对应时间的一个时间点(即需要提取的数据所处的时间的时间戳at),需要提取的数据所处的时间的时间戳at对应的数据段内的数据是该数据段对应的第Ⅰ单位时间内数据。例如:第Ⅰ单位时间为1小时,即3600秒;L=10,LS=LT=64;统计数据的开始时间是2018年3月10日00:00:00,即统计数据开始时间的时间戳st=1520611200秒,读取数据的当前时刻所述位图中偏移量最大的数据段对应的最大时间点为2018年3月10日24:00:00,即为1520697600秒。已经存储了2018年3月10日的数据,读取数据时,如果想要读取1点到2点之间统计的数据,则可以先确定该时间段内的一个时间点为2018年3月10日01:30:00,即需要提取的数据所处的时间的时间戳at为1520616600,根据fn=[(at-st)/ts]*L+LS+LT,计算得到fn=138。即可读取在偏移量fn=138处的数据段的值dn。
基于图3所示的的基于Redis的数据读取方法,其还包括以下步骤:
步骤一:设置第Ⅱ单位时间t的值。
第Ⅱ单位时间t,是获取数据时的时间单位。比如:需要按1小时为单位获取某天统计数据,则第Ⅱ单位时间t就为1小时;需要按1天为单位获取某月的统计数据,则第Ⅱ单位时间t就为1天;需要按1个月为单位获取某年的统计数据,则第Ⅱ单位时间t就为1个月。第Ⅱ单位时间t可以与存储数据时的第Ⅰ单位时间ts的值相同,也可以不同。
步骤二:获取位图的第Ⅰ单位时间ts的值,并根据第Ⅰ单位时间ts的值及第Ⅱ单位时间t的值,获得倍率周期数组A[x];所述倍率周期数组A中的x=t/ts,且x为大于或等1的整数。
例如:若第Ⅰ单位时间ts的值为1小时,第Ⅱ单位时间t的值为1小时,此时,倍率周期数组A=[1](1小时/1小时=1),即x=1;若第Ⅰ单位时间ts的值为1分钟,第Ⅱ单位时间t的值为1小时,此时,倍率周期数组A=[60](1小时/1分钟=60),即x=60;若第Ⅰ单位时间ts的值为1天,第Ⅱ单位时间t的值为1月(假设是非闰年-2017年),此时,倍率周期数组A=[31,28,31,30,31,30,31,31,30,31,30,31](非闰年中12个月份分别与第Ⅰ单位时间ts的值的比率),即x1=31天/1天=31、x2=28天/1天=28、x3=31天/1天=31、x4=30天/1天=30、x5=31天/1天=31、x6=30天/1天=30、x7=31天/1天=31、x8=31天/1天=31、x9=30天/1天=30、x10=31天/1天=31、x11=30天/1天=30、x12=31天/1天=31;此时x下面的序号表示月份。
步骤三:获取所述第Ⅱ单位时间t的循环周期T,并根据所述循环周期T获得读取范围长度c的值,所述读取范围长度c的值为c=T/t。
所述第Ⅱ单位时间t的循环周期T,即是以第Ⅱ单位时间t为单位进行循环一次的时间。比如:若第Ⅱ单位时间t值为1小时,则其循环周期T为24小时,即以小时为单位,24小时循环一次;若第Ⅱ单位时间t值为1月,则其针对非闰年对应的循环周期T为12个月,即以1月为单位,12个月循环一次。
所述读取范围长度c,即是一个循环周期T内有c个第Ⅱ单位时间t。比如:若第Ⅱ单位时间t的值为1小时,其对应的循环周期T为24小时,此时,c=24小时/1小时=24;若第Ⅱ单位时间t的值为1月,其针对非闰年的循环周期T为12个月,此时,c=12个月/1个月=12。
所述基于Redis的数据读取方法还包括:
S1:设置当前循环为c次循环中的第i次循环,i的起始值为1;
S2:根据倍率周期数组A中的数据个数La及i值,计算倍率周期数组A中的数据的序数j的值,其中j=mod(i,La)+1;并设定k为倍率周期数组A中第j个数据的值,k为大于或等于1的整数;
S3:判断k是否等于1;
S4:如果k等于1,则则执行步骤S101-步骤S105;
S5:如果k不等于1,则执行步骤S101-步骤S105;之后,继续执行步骤S51-步骤S54:
S51:使当前偏移量fn加L获得下一个数据段的偏移量f(n+1);
S52:读取在偏移量f(n+1)处的数据段的值d(n+1);
S53:重复步骤S51、步骤S52,获得偏移量f(n+2)=f(n+1)+L,读取在偏移量f(n+2)处的数据段的值d(n+2);重复步骤S51、步骤S52,获得偏移量f(n+3)=f(n+2)+L,读取在偏移量f(n+3)处的数据段的值d(n+3);依此顺序,重复步骤S51、步骤S52,直到获得偏移量f(n+p)=f(n+p-1)+L,并读取在偏移量f(n+p)处的数据段的值d(n+p);其中p=k-1;
S54:获得统计数据Di的值,其中Di=dn+d(n+1)+d(n+2)+……+d(n+p);
S6:使i的值加1,并判断当前i的值是否大于c的值;
S7:如果当前i的值是不大于c的值,则重复步骤S2-步骤S6;
S8:如果当前i的值大于c的值,则结束。
公式j=mod(i,La)+1,表示对i和La进行取模运算,之后加1。
通过本发明实施例的基于Redis的数据读取方法,不仅可以根据具体的时间进行快速、高效、精准地读取所需要的存储数据,而且,还可以根据所需,按照周期循环精确读取某个循环周期内统计的数值,并计算某段时间内的总值,很大程度上节约了工作人员的时间,提高了工作效率。
具体地,假设:第Ⅱ单位时间t为1个月,第Ⅰ单位时间ts为1天,(假设是非闰年-2017年)获得的倍率周期A[x]=A=[31,28,31,30,31,30,31,31,30,31,30,31],获取的循环周期T为12个月,读取范围长度c的值为c=T/t=12;读取步骤包括以下循环:
S301:设置当前循环为c=12次循环中的第i次循环,i的起始值为1;
S302:根据倍率周期数组A=[31,28,31,30,31,30,31,31,30,31,30,31]中的数据个数La=12及i=1,计算倍率周期数组A中的数据的序数j的值,其中j=mod(i,La)+1=mod(1,12)+1=1+1=2;并设定k为倍率周期数组A中第j个数据的值,则当前k就为28;
S303:判断k是否等于1;
S304:如果k等于1,则执行骤S3051-步骤S3056;
S305:k为28,不等于1,则执行步骤S3051-步骤S3056;之后,继续执行步骤S3057-步骤S3059:
S3051:确定位图中需要提取的数据所处的时间的时间戳at为1485878401秒;(根据j=2,可以判断出需要读取2月份的数值,因为第Ⅰ单位时间ts为1天,则需要确定第一天的一个时间点即可,本实施例确定的时间点可以为2017年2月1日00:00:01;);
S3052:获取st的值为1483200000秒(即为2017年1月1日00:00:00),获取所述位图中偏移量最大的数据段对应的时间的最大值为1520697600秒(即截止到当前读取数据时刻,统计的数据是到2018年3月10日24:00:00),
S3053:判断at是否小于st或者at是否大于所述位图中偏移量最大的数据段对应的时间;
S3054:如果at小于st或者at大于所述位图中偏移量最大的数据段对应的时间,则读取的值为0;
S3055:如果at不小于st,且at不大于所述位图中偏移量最大的数据段对应的时间,则根据所述需要提取的数据所处的时间的时间戳at获取所述位图中第n个数据段的偏移量fn,fn=[(at-st)/ts]*L+LS+LT,其中,LS为所述位图的第一个数据段的位宽64位,LT为所述位图的第二个数据段的位宽64位,L为第三个及其之后的数据段的位宽10位,ts位所述位图的第Ⅰ单位时间,at、st、ts的时间单位一致,且(at-st)/ts为向下整除运算,n为大于或等于3的整数;
此时,at=1485878401秒,st=1483200000秒,位图中偏移量最大的数据段对应的时间的最大值为1520697600秒,因此,第n个数据段的偏移量fn=[(at-st)/ts]*L+LS+LT=[(1485878401-1483200000)/24*3600]*10+64+64=31*10+128=438;
S3056:读取在偏移为438处的数据段的值dn;
S3057:使当前偏移量fn加L获得下一个数据段的偏移量f(n+1),f(n+1)=fn+L=(438+10=448;
S3058:读取在偏移量f(n+1)处的数据段的值d(n+1);
S3059:重复步骤S3057、步骤S3058,获得偏移量f(n+2)=f(n+1)+L=448+10=458,读取在偏移量f(n+2)处的数据段的值d(n+2);重复步骤S3057、步骤S3058,获得偏移量f(n+3)=f(n+2)+L=468,读取在偏移量f(n+3)处的数据段的值d(n+3);依此顺序,重复步骤S3057、步骤S3058,直到获得偏移量f(n+p)=f(n+p-1)+L,并读取在偏移量f(n+p)处的数据段的值d(n+p);其中p=k-1;即f(n+p)=f(n+p-1)+L=f(n+26)+L;
S306:获得统计数据Di的值,其中Di=dn+d(n+1)+d(n+2)+……+d(n+p);此时的Di即为第j=2个月的统计数据总值;
S307:使i的值加1,即当前i=2,并判断当前i的值是否大于c的值,c=12,即i小于c;
S308:如果当前i的值是不大于c的值,则重复步骤S302-步骤S307;依此循环,i值先后取2、3、4、5、6、7、8、9、10、11、12依照j=mod(i,La)+1,先后获得j值为3、4、5、6、7、8、9、10、11、12、1,依此顺序,可以分别获得:第3个月、第4个月、第5个月、第6个月、第7个月、第8个月、第9个月、第10个月、第11个月、第12个月、第1个月的统计数据的总值;
S309:如果当前i的值为13,即大于c的值,则结束。
如图4所示的基于Redis的数据读取方法,其包括以下步骤:
S401:获取位图中第二个数据段的偏移量f2的值;
S402:根据偏移量f2的值,查找到与偏移量f2对应的数据段;
S403:读取与偏移量f2对应的数据段内的统计数据。
本发明实施例的读取方法,可以直接读取如图1所示的存储方法存储的总数值,即不需要额外计算。
如图5所示的基于Redis的数据存储装置,其包括:
预测模块,用于设置第Ⅰ单位时间ts的值,并设置该第Ⅰ单位时间内统计数据的最大值;
划分模块,用于将位图划分成m个连续的有一定位宽的数据段;m为大于或等于3的整数;其中,第一个数据段的位宽为LS,第二个数据段的位宽为LT;第一个数据段的偏移量f1为0,第二个数据段的偏移量f2为LS,第n个数据段的偏移量fn=[(ct-st)/ts]*L+LS+LT;其中,L为第三个及其之后的数据段的位宽,且L为大于或等于1的整数,且位宽为L的数据段可存取的最大数据大于或等于所述第Ⅰ单位时间内统计数据的最大值;ct为统计数据过程中当前时间的时间戳,且ct是随时间变化而变化的,st为统计数据开始时间的时间戳,ct≥st,ct、st、ts的时间单位一致,且(ct-st)/ts为向下整除运算,n为大于或等于3的整数;
存储模块,用于读取统计数据开始时间的时间戳st,并将统计开始时间的时间戳st的二进制数据存储到与偏移量f1对应的数据段内;
第一计算模块,用于读取统计数据过程中当前时间的时间戳ct,并根据fn=[(ct-st)/ts]*L+LS+LT,计算得出统计数据过程中当前时间的时间戳ct对应的偏移量fn;
第一累加模块,用于根据计算得出的偏移量fn,将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量fn对应的数据段内的数值上;
第二累加模块,用于将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量f2对应的数据段内的数值上。本发明实施例的基于Redis的数据存储装置,可实现图1所示的存储方法,其相比于传统的数据库存储,节省了很多的存储空间(仅512M的存储空间就可以满足一项数据近万年的统计需求),有着更高的效率。另外,该装置可以更轻松、高效地实现统计数据的实时处理。因此,本发明实施例的基于Redis的数据存储装置有着占用存储空间小、效率高、实时存储等优点。
基于图5所示的基于Redis的数据存储装置,
所述第一累加模块包括:
比较单元,用于根据n=(ct-st)/ts+3,计算出当前n的值,并将当前n的值与当前m的值进行比较;
第一累加单元,用于如果当前n的值小于或等于当前m的值,则将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量fn对应的数据段内的数值上;
第二累加单元,用于如果当前n的值大于当前m的值,则将位图扩展成具有h个一定位宽的数据段,其中,新扩增的数据段的位宽为L,h的值大于或等于n的值;并将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量fn对应的数据段内的数值上。
如图6所示的基于Redis的数据读取装置,其包括:
确定模块,用于确定位图中需要提取的数据所处的时间的时间戳at;
第一判断模块,用于用于判断at是否小于st或者at是否大于所述位图中偏移量最大的数据段对应的时间,st为统计数据开始时间的时间戳;
第一读取模块,用于如果at小于st或者at大于所述位图中偏移量最大的数据段对应的时间,则读取的值为0;
获取模块,用于如果at不小于st,且at不大于所述位图中偏移量最大的数据段对应的时间,则根据所述需要提取的数据所处的时间的时间戳at获取所述位图中第n个数据段的偏移量fn,fn=[(at-st)/ts]*L+LS+LT,其中,LS为所述位图的第一个数据段的位宽,LT为所述位图的第二个数据段的位宽,L为第三个及其之后的数据段的位宽,ts位所述位图的第Ⅰ单位时间,at、st、ts的时间单位一致,且(at-st)/ts为向下整除运算,n为大于或等于3的整数;
第二读取模块,用于读取在偏移量fn处的数据段的值dn。
基于图6所示的基于Redis的数据读取装置,如图7所示,其还包括:
第一设置模块,用于设置第Ⅱ单位时间t的值;
第一获得模块,用于获取位图的第Ⅰ单位时间ts的值,并根据第Ⅰ单位时间ts的值及第Ⅱ单位时间t的值,获得倍率周期数组A[x];所述倍率周期数组A中的x=t/ts,且x为大于或等1的整数;
第二获得模块,用于获取所述第Ⅱ单位时间t的循环周期T,并根据所述循环周期T获得读取范围长度c的值,所述读取范围长度c的值为c=T/t;
且所述装置还包括:
第二设置模块,用于设置当前循环为c次循环中的第i次循环,i的起始值为1;
第二计算模块,用于根据倍率周期数组A中的数据个数La及i值,计算倍率周期数组A中的数据的序数j的值,其中j=mod(i,La)+1;并设定k为倍率周期数组A中第j个数据的值,k为大于或等于1的整数;
第二判断模块,用于判断k是否等于1;
第一调取模块,用于如果k等于1,则调取并依次执行所述确定模块、第一判断模块、第一读取模块、获取模块和所述第二读取模块;
执行模块,用于如果k不等于1,则调取并依次执行所述确定模块、第一判断模块、第一读取模块、获取模块和所述第二读取模块;之后,执行循环模块,所述循环模块包括偏移量单元、读取单元、重复单元、获得单元:
所述偏移量单元,用于使当前偏移量fn加L获得下一个数据段的偏移量f(n+1);
所述读取单元,用于读取在偏移量f(n+1)处的数据段的值d(n+1);
所述重复单元,用于重复调取所述累加单元和所述读取单元,获得偏移量f(n+2)=f(n+1)+L,读取在偏移量f(n+2)处的数据段的值d(n+2);获得偏移量f(n+3)=f(n+2)+L,读取在偏移量f(n+3)处的数据段的值d(n+3);依此顺序,直到获得偏移量f(n+p)=f(n+p-1)+L,并读取在偏移量f(n+p)处的数据段的值d(n+p);其中p=k-1;
所述获得单元,用于获得统计数据Di的值,其中Di=dn+d(n+1)+d(n+2)+……+d(n+p);
且所述装置还包括:
第三判断模块,用于使i的值加1,并判断当前i的值是否大于c的值;
第二调取模块,用于如果当前i的值是不大于c的值,则调取并依次执行第二计算模块、第一判断模块、第一调取模块、执行模块、第二判断模块;
结束模块,用于如果当前i的值大于c的值,则结束。
如图8所示的基于Redis的数据读取装置,其包括:
得到模块,用于获取位图中第二个数据段的偏移量f2的值;
查找模块,用于根据偏移量f2的值,查找到与偏移量f2对应的数据段;
数据模块,用于读取与偏移量f2对应的数据段内的统计数据。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得终端设备(可以是手机,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以集成于一体,也可以分离部署;可以合并为一个模块,也可以进一步拆分成多个子模块。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。

Claims (10)

1.一种基于Redis的数据存储方法,其特征在于,包括以下步骤:
设置第Ⅰ单位时间ts的值,并设置该第Ⅰ单位时间内统计数据的最大值;
将位图划分成m个连续的有一定位宽的数据段;m为大于或等于3的整数;其中,第一个数据段的位宽为LS,第二个数据段的位宽为LT;第一个数据段的偏移量f1为0,第二个数据段的偏移量f2为LS,第n个数据段的偏移量fn=[(ct-st)/ts]*L+LS+LT;其中,L为第三个及其之后的数据段的位宽,且L为大于或等于1的整数,且位宽为L的数据段可存取的最大数据大于或等于所述第Ⅰ单位时间内统计数据的最大值;ct为统计数据过程中当前时间的时间戳,且ct是随时间变化而变化的,st为统计数据开始时间的时间戳,ct≥st,ct、st、ts的时间单位一致,且(ct-st)/ts为向下整除运算,n为大于或等于3的整数;
读取统计数据开始时间的时间戳st,并将统计开始时间的时间戳st的二进制数据存储到与偏移量f1对应的数据段内;
读取统计数据过程中当前时间的时间戳ct,并根据fn=[(ct-st)/ts]*L+LS+LT,计算得出统计数据过程中当前时间的时间戳ct对应的偏移量fn;
根据计算得出的偏移量fn,将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量fn对应的数据段内的数值上;
将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量f2对应的数据段内的数值上。
2.根据权利要求1所述的基于Redis的数据存储方法,其特征在于,所述将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量fn对应的数据段内的数值上,包括以下步骤:
根据n=(ct-st)/ts+3,计算出当前n的值,并将当前n的值与当前m的值进行比较;
如果当前n的值小于或等于当前m的值,则将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量fn对应的数据段内的数值上;
如果当前n的值大于当前m的值,则将位图扩展成具有h个一定位宽的数据段,其中,新扩增的数据段的位宽为L,h的值大于或等于n的值;并将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量fn对应的数据段内的数值上。
3.一种基于Redis的数据读取方法,其特征在于,包括以下步骤:
S101:确定位图中需要提取的数据所处的时间的时间戳at;
S102:判断at是否小于st或者at是否大于所述位图中偏移量最大的数据段对应的时间,st为统计数据开始时间的时间戳;
S103:如果at小于st或者at大于所述位图中偏移量最大的数据段对应的时间,则读取的值为0;
S104:如果at不小于st,且at不大于所述位图中偏移量最大的数据段对应的时间,则根据所述需要提取的数据所处的时间的时间戳at获取所述位图中第n个数据段的偏移量fn,fn=[(at-st)/ts]*L+LS+LT,其中,LS为所述位图的第一个数据段的位宽,LT为所述位图的第二个数据段的位宽,L为第三个及其之后的数据段的位宽,ts位所述位图的第Ⅰ单位时间,at、st、ts的时间单位一致,且(at-st)/ts为向下整除运算,n为大于或等于3的整数;
S105:读取在偏移量fn处的数据段的值dn。
4.根据权利要求3所述的基于Redis的数据读取方法,其特征在于,还包括以下步骤:
设置第Ⅱ单位时间t的值;
获取位图的第Ⅰ单位时间ts的值,并根据第Ⅰ单位时间ts的值及第Ⅱ单位时间t的值,获得倍率周期数组A[x];所述倍率周期数组A中的x=t/ts,且x为大于或等1的整数;
获取所述第Ⅱ单位时间t的循环周期T,并根据所述循环周期T获得读取范围长度c的值,所述读取范围长度c的值为c=T/t;
且还包括:
S1:设置当前循环为c次循环中的第i次循环,i的起始值为1;
S2:根据倍率周期数组A中的数据个数La及i值,计算倍率周期数组A中的数据的序数j的值,其中j=mod(i,La)+1;并设定k为倍率周期数组A中第j个数据的值,k为大于或等于1的整数;
S3:判断k是否等于1;
S4:如果k等于1,则执行步骤S101-步骤S105;
S5:如果k不等于1,则执行步骤S101-步骤S105;之后,继续执行步骤S51-步骤S54:
S51:使当前偏移量fn加L获得下一个数据段的偏移量f(n+1);
S52:读取在偏移量f(n+1)处的数据段的值d(n+1);
S53:重复步骤S51、步骤S52,获得偏移量f(n+2)=f(n+1)+L,读取在偏移量f(n+2)处的数据段的值d(n+2);重复步骤S51、步骤S52,获得偏移量f(n+3)=f(n+2)+L,读取在偏移量f(n+3)处的数据段的值d(n+3);依此顺序,重复步骤S51、步骤S52,直到获得偏移量f(n+p)=f(n+p-1)+L,并读取在偏移量f(n+p)处的数据段的值d(n+p);其中p=k-1;
S54:获得统计数据Di的值,其中Di=dn+d(n+1)+d(n+2)+……+d(n+p);
S6:使i的值加1,并判断当前i的值是否大于c的值;
S7:如果当前i的值是不大于c的值,则重复步骤S2-步骤S6;
S8:如果当前i的值大于c的值,则结束。
5.一种基于Redis的数据读取方法,其特征在于,包括以下步骤:
获取位图中第二个数据段的偏移量f2的值;
根据偏移量f2的值,查找到与偏移量f2对应的数据段;
读取与偏移量f2对应的数据段内的统计数据。
6.一种基于Redis的数据存储装置,其特征在于,包括:
预测模块,用于设置第Ⅰ单位时间ts的值,并设置该第Ⅰ单位时间内统计数据的最大值;
划分模块,用于将位图划分成m个连续的有一定位宽的数据段;m为大于或等于3的整数;其中,第一个数据段的位宽为LS,第二个数据段的位宽为LT;第一个数据段的偏移量f1为0,第二个数据段的偏移量f2为LS,第n个数据段的偏移量fn=[(ct-st)/ts]*L+LS+LT;其中,L为第三个及其之后的数据段的位宽,且L为大于或等于1的整数,且位宽为L的数据段可存取的最大数据大于或等于所述第Ⅰ单位时间内统计数据的最大值;ct为统计数据过程中当前时间的时间戳,且ct是随时间变化而变化的,st为统计数据开始时间的时间戳,ct≥st,ct、st、ts的时间单位一致,且(ct-st)/ts为向下整除运算,n为大于或等于3的整数;
存储模块,用于读取统计数据开始时间的时间戳st,并将统计开始时间的时间戳st的二进制数据存储到与偏移量f1对应的数据段内;
第一计算模块,用于读取统计数据过程中当前时间的时间戳ct,并根据fn=[(ct-st)/ts]*L+LS+LT,计算得出统计数据过程中当前时间的时间戳ct对应的偏移量fn;
第一累加模块,用于根据计算得出的偏移量fn,将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量fn对应的数据段内的数值上;
第二累加模块,用于将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量f2对应的数据段内的数值上。
7.根据权利要求6所述的基于Redis的数据存储装置,其特征在于,所述第一累加模块包括:
比较单元,用于根据n=(ct-st)/ts+3,计算出当前n的值,并将当前n的值与当前m的值进行比较;
第一累加单元,用于如果当前n的值小于或等于当前m的值,则将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量fn对应的数据段内的数值上;
第二累加单元,用于如果当前n的值大于当前m的值,则将位图扩展成具有h个一定位宽的数据段,其中,新扩增的数据段的位宽为L,h的值大于或等于n的值;并将统计数据过程中当前时间的时间戳ct对应的当前统计数值v的二进制数据累加到与偏移量fn对应的数据段内的数值上。
8.一种基于Redis的数据读取装置,其特征在于,包括:
确定模块,用于确定位图中需要提取的数据所处的时间的时间戳at;
第一判断模块,用于用于判断at是否小于st或者at是否大于所述位图中偏移量最大的数据段对应的时间,st为统计数据开始时间的时间戳;
第一读取模块,用于如果at小于st或者at大于所述位图中偏移量最大的数据段对应的时间,则读取的值为0;
获取模块,用于如果at不小于st,且at不大于所述位图中偏移量最大的数据段对应的时间,则根据所述需要提取的数据所处的时间的时间戳at获取所述位图中第n个数据段的偏移量fn,fn=[(at-st)/ts]*L+LS+LT,其中,LS为所述位图的第一个数据段的位宽,LT为所述位图的第二个数据段的位宽,L为第三个及其之后的数据段的位宽,ts位所述位图的第Ⅰ单位时间,at、st、ts的时间单位一致,且(at-st)/ts为向下整除运算,n为大于或等于3的整数;
第二读取模块,用于读取在偏移量fn处的数据段的值dn。
9.根据权利要求8所述的基于Redis的数据读取装置,其特征在于,还包括:
第一设置模块,用于设置第Ⅱ单位时间t的值;
第一获得模块,用于获取位图的第Ⅰ单位时间ts的值,并根据第Ⅰ单位时间ts的值及第Ⅱ单位时间t的值,获得倍率周期数组A[x];所述倍率周期数组A中的x=t/ts,且x为大于或等1的整数;
第二获得模块,用于获取所述第Ⅱ单位时间t的循环周期T,并根据所述循环周期T获得读取范围长度c的值,所述读取范围长度c的值为c=T/t;
且所述装置还包括:
第二设置模块,用于设置当前循环为c次循环中的第i次循环,i的起始值为1;
第二计算模块,用于根据倍率周期数组A中的数据个数La及i值,计算倍率周期数组A中的数据的序数j的值,其中j=mod(i,La)+1;并设定k为倍率周期数组A中第j个数据的值,k为大于或等于1的整数;
第二判断模块,用于判断k是否等于1;
第一调取模块,用于如果k等于1,则调取并依次执行所述确定模块、第一判断模块、第一读取模块、获取模块和所述第二读取模块;
执行模块,用于如果k不等于1,则调取并依次执行所述确定模块、第一判断模块、第一读取模块、获取模块和所述第二读取模块;之后,执行循环模块,所述循环模块包括偏移量单元、读取单元、重复单元、获得单元:
所述偏移量单元,用于使当前偏移量fn加L获得下一个数据段的偏移量f(n+1);
所述读取单元,用于读取在偏移量f(n+1)处的数据段的值d(n+1);
所述重复单元,用于重复调取所述累加单元和所述读取单元,获得偏移量f(n+2)=f(n+1)+L,读取在偏移量f(n+2)处的数据段的值d(n+2);获得偏移量f(n+3)=f(n+2)+L,读取在偏移量f(n+3)处的数据段的值d(n+3);依此顺序,直到获得偏移量f(n+p)=f(n+p-1)+L,并读取在偏移量f(n+p)处的数据段的值d(n+p);其中p=k-1;
所述获得单元,用于获得统计数据Di的值,其中Di=dn+d(n+1)+d(n+2)+……+d(n+p);
且所述装置还包括:
第三判断模块,用于使i的值加1,并判断当前i的值是否大于c的值;
第二调取模块,用于如果当前i的值是不大于c的值,则调取并依次执行第二计算模块、第一判断模块、第一调取模块、执行模块、第二判断模块;
结束模块,用于如果当前i的值大于c的值,则结束。
10.一种基于Redis的数据读取装置,其特征在于,包括:
得到模块,用于获取位图中第二个数据段的偏移量f2的值;
查找模块,用于根据偏移量f2的值,查找到与偏移量f2对应的数据段;
数据模块,用于读取与偏移量f2对应的数据段内的统计数据。
CN201810274998.2A 2018-03-30 2018-03-30 基于Redis的数据存储方法、读取方法及装置 Active CN108509592B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810274998.2A CN108509592B (zh) 2018-03-30 2018-03-30 基于Redis的数据存储方法、读取方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810274998.2A CN108509592B (zh) 2018-03-30 2018-03-30 基于Redis的数据存储方法、读取方法及装置

Publications (2)

Publication Number Publication Date
CN108509592A true CN108509592A (zh) 2018-09-07
CN108509592B CN108509592B (zh) 2022-11-29

Family

ID=63379574

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810274998.2A Active CN108509592B (zh) 2018-03-30 2018-03-30 基于Redis的数据存储方法、读取方法及装置

Country Status (1)

Country Link
CN (1) CN108509592B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110134721A (zh) * 2019-05-17 2019-08-16 智慧足迹数据科技有限公司 基于位图的数据统计方法、装置及电子设备
CN111258646A (zh) * 2018-11-30 2020-06-09 上海寒武纪信息科技有限公司 指令拆解方法、处理器、指令拆解装置及存储介质
CN111274249A (zh) * 2020-01-19 2020-06-12 深圳前海微众银行股份有限公司 用户画像数据存储优化方法、设备及可读存储介质
CN112131433A (zh) * 2020-08-20 2020-12-25 贝壳技术有限公司 区间计数查询方法及装置
CN112650756A (zh) * 2020-12-29 2021-04-13 成都科来网络技术有限公司 一种基于时序数据的时间投影的索引方法及系统
CN115623019A (zh) * 2022-12-02 2023-01-17 杭州雅拓信息技术有限公司 一种分布式运行流调度执行方法和系统

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101808243A (zh) * 2010-03-11 2010-08-18 杭州华三通信技术有限公司 一种基于快照的数据处理方法和设备
CN102291256A (zh) * 2011-07-25 2011-12-21 杭州华三通信技术有限公司 一种监控数据的查询方法和设备
CN102693286A (zh) * 2012-05-10 2012-09-26 华中科技大学 一种对文件内容与元数据进行组织管理的方法
CN103365745A (zh) * 2013-06-07 2013-10-23 上海爱数软件有限公司 一种基于内容地址存储的块级备份方法及系统
CN104239234A (zh) * 2014-10-13 2014-12-24 合一网络技术(北京)有限公司 一种高效的本地缓存管理及读写方法
CN105302668A (zh) * 2015-10-21 2016-02-03 上海爱数信息技术股份有限公司 一种优化对象存储系统中块设备数据访问性能的方法
CN106406896A (zh) * 2016-09-27 2017-02-15 北京天德科技有限公司 一种并行PipeLine技术的区块链建块方法
CN106874459A (zh) * 2017-02-14 2017-06-20 北京奇虎科技有限公司 流式数据存储方法及装置
CN107340971A (zh) * 2016-04-28 2017-11-10 上海优刻得信息科技有限公司 一种数据存储与恢复架构与方法
US20180081549A1 (en) * 2016-09-20 2018-03-22 International Business Machines Corporation Data mirror invalid timestamped write handling

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101808243A (zh) * 2010-03-11 2010-08-18 杭州华三通信技术有限公司 一种基于快照的数据处理方法和设备
CN102291256A (zh) * 2011-07-25 2011-12-21 杭州华三通信技术有限公司 一种监控数据的查询方法和设备
CN102693286A (zh) * 2012-05-10 2012-09-26 华中科技大学 一种对文件内容与元数据进行组织管理的方法
CN103365745A (zh) * 2013-06-07 2013-10-23 上海爱数软件有限公司 一种基于内容地址存储的块级备份方法及系统
CN104239234A (zh) * 2014-10-13 2014-12-24 合一网络技术(北京)有限公司 一种高效的本地缓存管理及读写方法
CN105302668A (zh) * 2015-10-21 2016-02-03 上海爱数信息技术股份有限公司 一种优化对象存储系统中块设备数据访问性能的方法
CN107340971A (zh) * 2016-04-28 2017-11-10 上海优刻得信息科技有限公司 一种数据存储与恢复架构与方法
US20180081549A1 (en) * 2016-09-20 2018-03-22 International Business Machines Corporation Data mirror invalid timestamped write handling
CN106406896A (zh) * 2016-09-27 2017-02-15 北京天德科技有限公司 一种并行PipeLine技术的区块链建块方法
CN106874459A (zh) * 2017-02-14 2017-06-20 北京奇虎科技有限公司 流式数据存储方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
刘俊龙等: "基于Redis的海量互联网小文件实时存储与索引策略研究", 《计算机研究与发展》 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111258646A (zh) * 2018-11-30 2020-06-09 上海寒武纪信息科技有限公司 指令拆解方法、处理器、指令拆解装置及存储介质
CN111258646B (zh) * 2018-11-30 2023-06-13 上海寒武纪信息科技有限公司 指令拆解方法、处理器、指令拆解装置及存储介质
CN110134721A (zh) * 2019-05-17 2019-08-16 智慧足迹数据科技有限公司 基于位图的数据统计方法、装置及电子设备
CN111274249A (zh) * 2020-01-19 2020-06-12 深圳前海微众银行股份有限公司 用户画像数据存储优化方法、设备及可读存储介质
CN112131433A (zh) * 2020-08-20 2020-12-25 贝壳技术有限公司 区间计数查询方法及装置
CN112131433B (zh) * 2020-08-20 2021-10-29 贝壳找房(北京)科技有限公司 区间计数查询方法及装置
CN112650756A (zh) * 2020-12-29 2021-04-13 成都科来网络技术有限公司 一种基于时序数据的时间投影的索引方法及系统
CN112650756B (zh) * 2020-12-29 2023-05-02 科来网络技术股份有限公司 一种基于时序数据的时间投影的索引方法及系统
CN115623019A (zh) * 2022-12-02 2023-01-17 杭州雅拓信息技术有限公司 一种分布式运行流调度执行方法和系统

Also Published As

Publication number Publication date
CN108509592B (zh) 2022-11-29

Similar Documents

Publication Publication Date Title
CN108509592A (zh) 基于Redis的数据存储方法、读取方法及装置
US7801903B2 (en) Shared-memory multiprocessor system and method for processing information
CN110413611B (zh) 数据存储、查询方法及装置
CN109800936B (zh) 基于树状搜寻的调度方法与使用该方法的电子装置
CN116318174B (zh) 一种污水处理厂的垃圾运输管理系统的数据管理方法
CN111597054B (zh) 一种信息处理方法、系统、电子设备及存储介质
CN109962711A (zh) 一种数据压缩方法、电子设备及存储介质
CN107016591A (zh) 业务状态管理方法及系统
CN115796932A (zh) 一种工程造价预测方法、装置、电子设备及存储介质
CN110597627A (zh) 基于虚拟fpga的数据库运算加速装置及加速方法
CN112465321B (zh) 一种任务分析方法、装置、设备及存储介质
CN103858126A (zh) 压缩空间数据的装置和方法及恢复压缩的空间数据的装置和方法
US7624326B2 (en) Encoding device and method, decoding device and method, program, and recording medium
CN106372213A (zh) 一种位置分析方法
CN110502543A (zh) 设备性能数据存储方法、装置、设备和存储介质
JPH11282909A (ja) 生産スケジューリング方法及びその装置
CN111198807A (zh) 数据流分析方法、装置、计算机设备及存储介质
Li et al. A sort-based interest matching algorithm with two exclusive judging conditions for region overlap
CN117806609B (zh) 一种基于知识图谱和微服务的生成式低代码开发系统
US11281427B2 (en) Fast sort engine
JP2560347B2 (ja) 分割値検索処理方法
US20220171600A1 (en) Fast sort engine
CN113535838B (zh) 一种基于二进制编码的数据交互方法及系统
US20220269752A1 (en) Execution method for convolution computation
CN107451125B (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
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20180907

Assignee: Guiyang Longma Video Technology Co.,Ltd.

Assignor: GUIYANG LONGMASTER INFORMATION & TECHNOLOGY Co.,Ltd.

Contract record no.: X2023980033354

Denomination of invention: Redis based data storage method, reading method, and device

Granted publication date: 20221129

License type: Common License

Record date: 20230308

EE01 Entry into force of recordation of patent licensing contract
EE01 Entry into force of recordation of patent licensing contract
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20180907

Assignee: Guiyang Langma Communication Technology Co.,Ltd.

Assignor: GUIYANG LONGMASTER INFORMATION & TECHNOLOGY Co.,Ltd.

Contract record no.: X2023980033647

Denomination of invention: Redis based data storage method, reading method, and device

Granted publication date: 20221129

License type: Common License

Record date: 20230316

EE01 Entry into force of recordation of patent licensing contract
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20180907

Assignee: GUIYANG SANJIU INTERNET MEDICAL Co.,Ltd.

Assignor: GUIYANG LONGMASTER INFORMATION & TECHNOLOGY Co.,Ltd.

Contract record no.: X2023980033909

Denomination of invention: Redis based data storage method, reading method, and device

Granted publication date: 20221129

License type: Common License

Record date: 20230324

EE01 Entry into force of recordation of patent licensing contract
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20180907

Assignee: GUANGZHOU QISHENG INFORMATION TECHNOLOGY Co.,Ltd.

Assignor: GUIYANG LONGMASTER INFORMATION & TECHNOLOGY Co.,Ltd.

Contract record no.: X2023980034658

Denomination of invention: Redis based data storage method, reading method, and device

Granted publication date: 20221129

License type: Common License

Record date: 20230411