基于Redis的数据存储方法、读取方法及装置制造方法及图纸

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

Data storage method, reading method and device based on Redis

The invention belongs to the technical field of data storage, and specifically relates to a data storage method, a reading method and a device based on Redis. The data storage method includes setting the value of the first unit time t s and setting the maximum value of the statistical data in the first unit time; dividing the bitmap into m consecutive data segments with a fixed width; reading the time stamp CT of the current time in the statistical data process, and calculating the statistics according to FN =[(ct_st)/ts]*L+LS+LT. The offset FN corresponding to the timestamp CT of the current time in the data process; according to the offset FN calculated, the binary data of the current statistical value V corresponding to the timestamp CT of the current time in the statistical process is added to the data segment corresponding to the offset FN and so on. The storage method can be used for real-time storage of a large amount of statistical data.

【技术实现步骤摘要】
基于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可以有效利用硬件中的位级并行机制来快速、高效地执行运算操作。因此相比于传统的数据库统计方式,有本文档来自技高网...

【技术保护点】
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对应的数据段内的数值上。...

【技术特征摘要】
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的整数;其中,第...

【专利技术属性】
技术研发人员:韦吉云李晓鹏张云杨阳
申请(专利权)人:贵阳朗玛信息技术股份有限公司
类型:发明
国别省市:贵州,52

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1