数据的内存占用分析方法、装置及服务器与流程

文档序号:13004826阅读:146来源:国知局
本发明涉及计算机
技术领域
:,具体涉及一种数据的内存占用分析方法、装置、服务器及计算机存储介质。
背景技术
::数据库(database)是按照数据结构来组织、存储和管理数据的数据处理系统,随着互联网的发展,数据库的应用更加广泛,其性能要求也越来越高。目前数据库系统必须具备较高的事务处理速度和应用可靠性。对于redis这类基于内存的数据库,经常会面临内存容量莫名的增长,其中,无效数据(例如垃圾数据、无用数据、过期数据等)会消耗大量的内存,从而大大提高了硬件成本。对于redis数据库来说,数据在内存中以数据键值对方式存储,然而,redis数据库本身无法得知数据键对应的数据所占用的内存,导致数据库开发人员也就无法获知内存的占用情况。技术实现要素:鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据的内存占用分析方法、数据的内存占用分析装置、服务器和计算机存储介质。根据本发明的一个方面,提供了一种数据的内存占用分析方法,其中,各数据在内存中以数据键值对方式存储,该方法包括:获得包含内存中存储的各数据的数据文件;对数据文件进行数据分析,确定各数据所属的数据类型;针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体;根据数据结构体对应的内存容量计算算法,计算该数据所占用的内存容量。根据本发明的另一方面,提供了一种数据的内存占用分析装置,其中,各数据在内存中以数据键值对方式存储,该装置包括:获取模块,适于获得包含内存中存储的各数据的数据文件;数据类型分析模块,适于对数据文件进行数据分析,确定各数据所属的数据类型;数据结构体分析模块,适于针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体;计算模块,适于根据数据结构体对应的内存容量计算算法,计算该数据所占用的内存容量。根据本发明的又一方面,提供了一种服务器,包括:处理器、存储器、通信接口和通信总线,处理器、存储器和通信接口通过通信总线完成相互间的通信;存储器用于存放至少一可执行指令,可执行指令使处理器执行上述数据的内存占用分析方法对应的操作。根据本发明的再一方面,提供了一种计算机存储介质,存储介质中存储有至少一可执行指令,可执行指令使处理器执行如上述数据的内存占用分析方法对应的操作。根据本发明提供的方案,获得包含内存中存储的各数据的数据文件;对数据文件进行数据分析,确定各数据所属的数据类型;针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体;根据数据结构体对应的内存容量计算算法,计算该数据所占用的内存容量,从而克服了现有技术方案无法获知数据所占用的内存容量的缺陷,另外,本发明是在获取到内存中存储的各数据的数据文件进行数据分析,有效地提高了分析效率,而且还不会影响内存的正常运行。上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1示出了根据本发明实施例一的一种数据的内存占用分析方法的流程示意图;图2示出了根据本发明实施例二的一种数据的内存占用分析方法的流程示意图;图3示出了根据本发明实施例三的一种数据的内存占用分析装置的结构示意图;图4示出了根据本发明实施例四的一种数据的内存占用分析装置的结构示意图;图5示出了根据本发明实施例六的一种服务器的结构示意图。具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。实施例一图1示出了根据本发明实施例一的一种数据的内存占用分析方法的流程示意图。其中,各数据在内存中以数据键值对(k-v)方式存储,如图1所示,该方法包括以下步骤:步骤s100,获得包含内存中存储的各数据的数据文件。本发明实施例提供了一种数据的内存占用分析方法,希望利用该方法来对存储于内存中的数据占用内存的情况进行分析,首先需要获得包含内存中存储的各数据的数据文件,其中数据文件获取方法可以如下:方法一:除数据库所占用的内存块之外,在内存中分配用于数据的内存占用分析的内存块,读取存储于内存中的数据库中的数据,将数据以数据文件的形式存储于该内存块,得到包含内存中存储的各数据的数据文件;方法二:将内存中存储的数据进行转存处理,以得到存储于磁盘中的数据文件。具体地,可以对内存中存储的数据进行快照处理,得到rdb文件,然后,将rdb文件载入到磁盘中。当然还可以采用其他的获取方式,例如,从其他存储有内存中数据的服务器获取,这里不再举例说明。步骤s101,对数据文件进行数据分析,确定各数据所属的数据类型。在获得包含内存中存储的各数据的数据文件后,可以通过对数据文件进行数据分析来确定各数据所属的数据类型,具体地,可以将用户通过输入装置输入的数据内存占用分析的操作命令认定为开始对数据文件进行数据分析,其中,该操作命令可以携带有参数信息,例如,需要进行内存占用分析的数据键的标识,需要对哪些数据进行分析,例如是全部的数据,还是某一时间段内的数据,根据操作命令所携带的参数信息查找到对应的数据,进行数据分析,确定各数据所属的数据类型。步骤s102,针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体。每种数据类型对应有多种数据结构体,针对不同的数据结构体,计算数据所占用内存的内存容量计算算法不同,因此,在确定了数据的数据类型之后,还需要确定数据键对应的数据值所属的数据结构体,具体地,可以通过对数据键对应的数据值所包含的元素数量以及每一元素的数据长度来确定数据键对应的数据值所属的数据结构体。步骤s103,根据数据结构体对应的内存容量计算算法,计算该数据所占用的内存容量。在确定了数据键对应的数据值的数据结构体后,该数据结构体对应的内存容量计算算法即可确定,因此,可以根据数据结构体对应的内存容量计算算法,来计算各个数据所占用的内存容量。根据本发明上述实施例提供的方法,获得包含内存中存储的各数据的数据文件;对数据文件进行数据分析,确定各数据所属的数据类型;针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体;根据数据结构体对应的内存容量计算算法,计算该数据所占用的内存容量,从而克服了现有技术方案无法获知数据所占用的内存容量的缺陷,另外,本发明是在获取到内存中存储的各数据的数据文件进行数据分析,有效地提高了分析效率,而且还不会影响内存的正常运行。实施例二图2示出了根据本发明实施例二的一种数据的内存占用分析方法的流程示意图。其中,各数据在内存中以数据键值对方式存储,下面以数据存储于内存中的redis数据库中为例,详细介绍数据的内存占用分析方法,如图2所示,该方法包括以下步骤:步骤s200,将内存中存储的数据进行转存处理,得到存储磁盘中的数据文件。为了不影响正常的内存服务,可以将内存中存储的数据落地存储至磁盘中,针对于redis数据库,可以对内存中存储的数据进行快照处理,得到rdb文件,然后,将rdb文件载入到磁盘中。步骤s201,对磁盘中的数据文件进行数据分析,确定各数据所属的数据类型。举例说明,不同数据类型的数据在存储时,数据键不同,因此,可以通过对数据键进行分析,来确定各数据所属的数据类型,其中,数据类型包括以下一种或多种组合:哈希类型(hash类型)、有序集合类型(zset类型)、列表类型(list类型)、集合类型(set类型)和/或字符串类型(string类型)。在确定了各数据所属的数据类型后,还需要针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体,其中,hash类型对应的数据结构体包括:zipmap结构体和hashtable结构体;zset类型对应的数据结构体包括:ziplist结构体和skiplist结构体;list类型对应的数据结构体包括:ziplist结构体和linkedlist结构体;set类型对应的数据结构体包括:intset结构体和hashtable结构体;string类型对应的数据结构体包括:raw结构体和int结构体。在确定了数据所属的数据类型后,针对每一数据,需要确定该数据键对应的数据值属于哪种数据结构体,下面列举了五种数据类型,确定数据键对应的数据值的数据结构体的方法:若该数据的数据类型为hash类型,则可以根据各个数据键对应的数据值所包含的元素数量和每一元素的数据长度确定各个数据键对应的数据值的数据结构体,具体地,可以采用步骤s202-步骤s204中介绍的方法:步骤s202,将各个数据键对应的数据值所包含的元素数量与第一预设阈值进行比较,以及将每一元素的数据长度与第二预设阈值进行比较,得到比较结果。我们知道,数据键对应的数据值可以包含一个或多个元素,且元素的数据长度可能相同,也可能不同,zipmap结构体限定了数据键对应的数据值所包含的元素数量和每一元素的数据长度的上限,具体地,zipmap结构体限定了数据键对应的数据值所包含的元素数量需小于512,且每一元素的数据长度均小于64字节,因此,可以依据zipmap结构体和hashtable结构体的特性来设定第一预设阈值和第二预设阈值,例如,可以将第一预设阈值设定为512,将第二预设阈值设定为64字节。步骤s203,若比较结果具体为元素数量小于第一预设阈值且每一元素的数据长度均小于第二预设阈值,则确定该数据键对应的数据值的数据结构体为zipmap结构体。若比较结果具体为元素数量小于512且每一元素的数据长度均小于64字节,则确定该数据键对应的数据值的数据结构体为zipmap结构体。步骤s204,若比较结果为其他情况,则确定该数据键对应的数据值的数据结构体为hashtable结构体。若比较结果具体为元素数量大于或等于512且每一元素的数据长度大于或等于64字节,或者,元素数量大于或等于512且每一元素的数据长度小于64字节,或者,元素数量小于512且每一元素的数据长度大于或等于64字节,则确定该数据键对应的数据值的数据结构体为hashtable结构体。若该数据的数据类型为zset类型,则可以根据各个数据键对应的数据值所包含的元素数量和每一元素的数据长度确定各个数据键对应的数据值的数据结构体,具体地,可以采用步骤s205-步骤s207中介绍的方法:步骤s205,将各个数据键对应的数据值所包含的元素数量与第三预设阈值进行比较,以及将每一元素的数据长度与第四预设阈值进行比较,得到比较结果。其中,ziplist结构体限定了数据键对应的数据值所包含的元素数量和每一元素的数据长度的上限,具体地,ziplist结构体限定了数据键对应的数据值所包含的元素数量需小于128,且每一元素的数据长度均小于64字节,因此,可以依据ziplist结构体和skiplist结构体的特性来设定第三预设阈值和第四预设阈值,例如,可以将第三预设阈值设定为128,将第四预设阈值设定为64字节。步骤s206,若比较结果具体为元素数量小于第三预设阈值且每一元素的数据长度均小于第四预设阈值,则确定该数据键对应的数据值的数据结构体为ziplist结构体。若比较结果具体为元素数量小于128且数据长度小于64字节,则确定该数据键对应的数据值的数据结构体为ziplist结构体。步骤s207,若比较结果为其他情况,则确定该数据键对应的数据值的数据结构体为skiplist结构体。若比较结果具体为元素数量大于或等于128且每一元素的数据长度大于或等于64字节,或者,元素数量大于或等于128且每一元素的数据长度小于64字节,或者,元素数量小于128且每一元素的数据长度大于或等于64字节,则确定该数据键对应的数据值的数据结构体为skiplist结构体。若该数据的数据类型为list类型,则可以根据各个数据键对应的数据值所包含的元素数量和每一元素的数据长度确定各个数据键对应的数据值的数据结构体,具体地,可以采用步骤s208-步骤s210中介绍的方法:步骤s208,将各个数据键对应的数据值所包含的元素数量与第五预设阈值进行比较,以及将每一元素的数据长度与第六预设阈值进行比较,得到比较结果。其中,ziplist结构体限定了数据键对应的数据值所包含的元素数量和每一元素的数据长度的上限,具体地,ziplist结构体限定了数据键对应的数据值所包含的元素数量需小于512,且每一元素的数据长度均小于64字节,因此,可以依据ziplist结构体和linkedlist结构体的特性来设定第五预设阈值和第六预设阈值,例如,可以将第五预设阈值设定为512,将第六预设阈值设定为64字节。步骤s209,若比较结果具体为元素数量小于第五预设阈值且每一元素的数据长度均小于第六预设阈值,则确定该数据键对应的数据值的数据结构体为ziplist结构体。若比较结果具体为元素数量小于512且每一元素的数据长度小于64字节,则确定该数据键对应的数据值的数据结构体为ziplist结构体。步骤s210,若比较结果为其他情况,则确定该数据键对应的数据值的数据结构体为linkedlist结构体。若比较结果具体为元素数量大于或等于512且每一元素的数据长度大于或等于64字节,或者,元素数量大于或等于512且每一元素的数据长度小于64字节,或者,元素数量小于512且每一元素的数据长度大于或等于64字节,则确定该数据键对应的数据值的数据结构体为linkedlist结构体。若该数据的数据类型为set类型,则可以根据各个数据键对应的数据值所包含的元素数量和每一元素的数据长度确定各个数据键对应的数据值的数据结构体,具体地,可以采用步骤s211-步骤s213中介绍的方法:步骤s211,将各个数据键对应的数据值所包含的元素数量与第七预设阈值进行比较,得到比较结果。其中,intset结构体限定了数据键对应的数据值所包含的元素数量的上限,具体地,intset结构体限定了数据键对应的数据值所包含的元素数量需小于512,因此,可以依据intset结构体和hashtable结构体的特性来设定第七预设阈值,例如,可以将第七预设阈值设定为512。步骤s212,若比较结果具体为元素数量小于第七预设阈值,则确定该数据键对应的数据值的数据结构体为intset结构体。若比较结果具体为元素数量小于512,则确定该数据键对应的数据值的数据结构体为intset结构体。步骤s213,若比较结果具体为元素数量大于或等于第七预设阈值,则确定该数据键对应的数据值的数据结构体为hashtable结构体。若比较结果具体为元素数量大于或等于512,则确定该数据键对应的数据值的数据结构体为hashtable结构体。步骤s214,若该数据的数据类型为string类型,则判断数据键对应的数据值所包含的每一元素是否符合预设范围,若是,则执行步骤s215;若否,则执行步骤s216。举例说明,数据键对应的数据值所包含的元素可以为1、2、3、4、5,也可以为a、b、c、d、e,数据键对应的数据值所包含的每一元素均符合预设范围,例如,0~9999,则可以确定该数据键对应的数据值的数据结构体为int结构体,若数据键对应的数据值所包含的元素大于9999,或者为a、b、c、d、e这种字符串类型,则可以确定该数据键对应的数据值的数据结构体为raw结构体。步骤s215,确定该数据键对应的数据值的数据结构体为int结构体。步骤s216,确定该数据键对应的数据值的数据结构体为raw结构体。步骤s217,根据数据结构体对应的内存容量计算算法,计算该数据所占用的内存容量。在确定了数据键对应的数据值的数据结构体后,该数据结构体对应的内存容量计算算法即可确定,因此,可以根据数据结构体对应的内存容量计算算法,来计算该数据所占用的内存容量,其中,数据所占用的内存容量主要包括:数据键所占用的内存容量、数据键对应的数据值所占用的内存容量以及数据结构所占用的内存容量。举例说明,以数据类型为string类型为例,其中,key为dbatest,value为aaaaaaaaaaaaaaaaaaaaaaaaaaaaa,则该数据所占用内存容量=24字节(dictentry结构)+16字节(redisobject结构)+16字节(key大小)+32字节(value大小),其中,dictentry结构负责保存具体的键值对;redisobject结构用作value对象。针对字符串类型对应的数据结构体,数据值所包含的元素在预设范围时,可以认定数据值是不占用内存的,具体地,可以利用以下方法进行判断:判断数据键对应的数据值所包含的元素是否符合预设范围;若是,则确定该数据键对应的数据值所占用的内存容量为零,其中,预设范围可以为0~9999。步骤s218,将数据键以及该数据键对应的数据所占用的内存容量反馈至用户。在计算得到各个数据键对应的数据所占用的内存容量后,可以将数据键以及该数据键对应的数据所占用的内存容量反馈至用户,以使用户能够清楚的了解到各个数据键以及该数据键对应的数据占用内存的情况,使得用户在了解到各个数据键以及该数据键对应的数据所占用的内存容量后,可以根据数据键对应的数据的重要性以及内存占用情况决定是否对内存中数据进行处理,例如数据键对应的数据的重要性比较低的情况下,可以删除占用内存容量很大的数据。为了能够让用户很直观地了解到数据键对应的数据所占用的内存容量,在本发明优选实施例中,可以根据预设规则对数据键对应的数据所占用的内存容量进行排序处理,例如,按照所占用的内存容量由大至小的顺序进行排序,将排序处理后的数据键以及该数据键对应的数据所占用的内存容量反馈至用户。根据本发明上述实施例提供的方法,将内存中存储的数据进行转存处理,得到存储磁盘中的数据文件,对磁盘中的数据文件进行数据分析,确定数据所属的数据类型,针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体,根据数据结构体对应的内存容量计算算法,计算该数据所占用的内存容量,将数据键以及该数据键对应的数据所占用的内存容量反馈至用户。基于本发明实施例的方案,可以分析计算出数据键对应的数据所占用的内存容量,并能让用户准确地了解到内存容量占用情况,使得用户能够根据需要选择对内存中占用内存容量较大的数据进行处理,以节省内存,同时还可以提高内存运行效率。实施例三图3示出了根据本发明实施例三的一种数据的内存占用分析装置的结构示意图。其中,数据在内存中以数据键值对方式存储,如图3所示,该装置包括:获取模块300、数据类型分析模块310、数据结构体分析模块320和计算模块330。获取模块300,适于获得包含内存中存储的各数据的数据文件。数据类型分析模块310,适于对数据文件进行数据分析,确定各数据所属的数据类型。数据结构体分析模块320,适于针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体。计算模块330,适于根据数据结构体对应的内存容量计算算法,计算该数据所占用的内存容量。根据本发明上述实施例提供的装置,获得包含内存中存储的各数据的数据文件;对数据文件进行数据分析,确定各数据所属的数据类型;针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体;根据数据结构体对应的内存容量计算算法,计算该数据所占用的内存容量,从而克服了现有技术方案无法获知数据所占用的内存容量的缺陷,另外,本发明是在获取到内存中存储的各数据的数据文件进行数据分析,有效地提高了分析效率,而且还不会影响内存的正常运行。实施例四图4示出了根据本发明实施例四的一种数据的内存占用分析装置的结构示意图。其中,各数据在内存中以数据键值对方式存储,下面以数据存储于内存中的redis数据库中为例,介绍数据的内存占用分析装置如何进行分析,如图4所示,该装置包括:获取模块400、数据类型分析模块410、数据结构体分析模块420、计算模块430和反馈模块440。获取模块400,适于将内存中存储的数据进行转存处理,以得到存储于磁盘中的数据文件。数据类型分析模块410,适于对磁盘中的数据文件进行数据分析,确定各数据所属的数据类型。其中,数据类型包括以下一种或多种组合:哈希类型、有序集合类型、列表类型、集合类型和/或字符串类型。各数据类型所对应的数据结构体如下:哈希类型对应的数据结构体包括:zipmap结构体和hashtable结构体;有序集合类型对应的数据结构体包括:ziplist结构体和skiplist结构体;列表类型对应的数据结构体包括:ziplist结构体和linkedlist结构体;集合类型对应的数据结构体包括:intset结构体和hashtable结构体;字符串类型对应的数据结构体包括:raw结构体和int结构体。在确定了数据所属的数据类型后,针对每一数据,需要确定各个数据键对应的数据值属于哪种数据结构体,下面列举了五种数据类型,数据结构体分析模块如何确定数据键对应的数据值的数据结构体:数据结构体分析模块420,适于若该数据的数据类型为哈希类型,则将各个数据键对应的数据值所包含的元素数量与第一预设阈值进行比较,以及将每一元素的数据长度与第二预设阈值进行比较,得到比较结果;若比较结果具体为元素数量小于第一预设阈值且每一元素的数据长度均小于第二预设阈值,则确定该数据键对应的数据值的数据结构体为zipmap结构体;若比较结果为其他情况,则确定该数据键对应的数据值的数据结构体为hashtable结构体。数据结构体分析模块420进一步适于:若该数据的数据类型为有序集合类型,则将各个数据键对应的数据值所包含的元素数量与第三预设阈值进行比较,以及将每一元素的数据长度与第四预设阈值进行比较,得到比较结果;若比较结果具体为元素数量小于第三预设阈值且每一元素的数据长度均小于第四预设阈值,则确定该数据键对应的数据值的数据结构体为ziplist结构体;若比较结果为其他情况,则确定该数据键对应的数据值的数据结构体为skiplist结构体。数据结构体分析模块420进一步适于:若该数据的数据类型为列表类型,则将各个数据键对应的数据值所包含的元素数量与第五预设阈值进行比较,以及将每一元素的数据长度与第六预设阈值进行比较,得到比较结果;若比较结果具体为元素数量小于第五预设阈值且每一元素的数据长度均小于第六预设阈值,则确定该数据键对应的数据值的数据结构体为ziplist结构体;若比较结果为其他情况,则确定该数据键对应的数据值的数据结构体为linkedlist结构体。数据结构体分析模块420进一步适于:若该数据的数据类型为集合类型,则将各个数据键对应的数据值所包含的元素数量与第七预设阈值进行比较,得到比较结果;若比较结果具体为元素数量小于第七预设阈值,则确定该数据键对应的数据值的数据结构体为intset结构体;若比较结果具体为元素数量大于或等于第七预设阈值,则确定该数据键对应的数据值的数据结构体为hashtable结构体。数据结构体分析模块420进一步适于:若该数据的数据类型为字符串类型,则判断数据键对应的数据值所包含的每一元素是否符合预设范围;若是,则确定该数据键对应的数据值的数据结构体为int结构体;若否,则确定该数据键对应的数据值的数据结构体为raw结构体。计算模块430,适于根据数据结构体对应的内存容量计算算法,计算该数据所占用的内存容量。其中,计算模块430进一步适于:针对字符串类型对应的数据结构体,判断数据键对应的数据值所包含的元素是否符合预设范围;若是,则确定该数据键对应的数据值所占用的内存容量为零。反馈模块440,适于将数据键以及该数据键对应的数据所占用的内存容量反馈至用户。其中,反馈模块440进一步包括:排序处理单元441,适于根据预设规则对数据键对应的数据所占用的内存容量进行排序处理;反馈单元442,适于将排序处理后的数据键以及该数据键对应的数据所占用的内存容量反馈至用户。根据本发明上述实施例提供的装置,将内存中存储的数据进行转存处理,得到存储磁盘中的数据文件,对磁盘中的数据文件进行数据分析,确定数据所属的数据类型,针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体,根据数据结构体对应的内存容量计算算法,计算该数据所占用的内存容量,将数据键以及该数据键对应的数据所占用的内存容量反馈至用户。基于本发明实施例的方案,可以分析计算出数据键对应的数据所占用的内存容量,并能让用户准确地了解到内存容量占用情况,使得用户能够根据需要选择对内存中占用内存容量较大的数据进行处理,以节省内存,同时还可以提高内存运行效率。实施例五本申请实施例五提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的数据的内存占用分析方法。实施例六图5示出了根据本发明实施例六的一种服务器的结构示意图,本发明具体实施例并不对服务器的具体实现做限定。如图5所示,该服务器可以包括:处理器(processor)502、通信接口(communicationsinterface)504、存储器(memory)506、以及通信总线508。其中:处理器502、通信接口504、以及存储器506通过通信总线508完成相互间的通信。通信接口504,用于与其它设备比如客户端或其它服务器等的网元通信。处理器502,用于执行程序510,具体可以执行上述数据的内存占用分析方法实施例中的相关步骤。具体地,程序510可以包括程序代码,该程序代码包括计算机操作指令。处理器502可能是中央处理器cpu,或者是特定集成电路asic(applicationspecificintegratedcircuit),或者是被配置成实施本发明实施例的一个或多个集成电路。服务器包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个cpu;也可以是不同类型的处理器,如一个或多个cpu以及一个或多个asic。存储器506,用于存放程序510。存储器506可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。程序510具体可以用于使得处理器502执行以下操作:获得包含内存中存储的各数据的数据文件;对数据文件进行数据分析,确定各数据所属的数据类型;针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体;根据数据结构体对应的内存容量计算算法,计算该数据所占用的内存容量。在一种可选的实施方式中,程序510还用于使得处理器502在获得包含内存中存储的各数据的数据文件时:将内存中存储的数据进行转存处理,以得到存储于磁盘中的数据文件。在一种可选的实施方式中,数据类型包括以下一种或多种组合:哈希类型、有序集合类型、列表类型、集合类型和/或字符串类型。在一种可选的实施方式中,哈希类型对应的数据结构体包括:zipmap结构体和hashtable结构体;有序集合类型对应的数据结构体包括:ziplist结构体和skiplist结构体;列表类型对应的数据结构体包括:ziplist结构体和linkedlist结构体;集合类型对应的数据结构体包括:intset结构体和hashtable结构体;字符串类型对应的数据结构体包括:raw结构体和int结构体。在一种可选的实施方式中,程序510还用于使得处理器502在针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体时:若该数据的数据类型为哈希类型,则将各个数据键对应的数据值所包含的元素数量与第一预设阈值进行比较,以及将每一元素的数据长度与第二预设阈值进行比较,得到比较结果;若比较结果具体为元素数量小于第一预设阈值且每一元素的数据长度均小于第二预设阈值,则确定该数据键对应的数据值的数据结构体为zipmap结构体;若比较结果为其他情况,则确定该数据键对应的数据值的数据结构体为hashtable结构体。在一种可选的实施方式中,程序510还用于使得处理器502在针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体时:若该数据的数据类型为有序集合类型,则将各个数据键对应的数据值所包含的元素数量与第三预设阈值进行比较,以及将每一元素的数据长度与第四预设阈值进行比较,得到比较结果;若比较结果具体为元素数量小于第三预设阈值且每一元素的数据长度均小于第四预设阈值,则确定该数据键对应的数据值的数据结构体为ziplist结构体;若比较结果为其他情况,则确定该数据键对应的数据值的数据结构体为skiplist结构体。在一种可选的实施方式中,程序510还用于使得处理器502在针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体时:若该数据的数据类型为列表类型,则将各个数据键对应的数据值所包含的元素数量与第五预设阈值进行比较,以及将每一元素的数据长度与第六预设阈值进行比较,得到比较结果;若比较结果具体为元素数量小于第五预设阈值且每一元素的数据长度均小于第六预设阈值,则确定该数据键对应的数据值的数据结构体为ziplist结构体;若比较结果为其他情况,则确定该数据键对应的数据值的数据结构体为linkedlist结构体。在一种可选的实施方式中,程序510还用于使得处理器502在针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体时:若该数据的数据类型为集合类型,则将各个数据键对应的数据值所包含的元素数量与第七预设阈值进行比较,得到比较结果;若比较结果具体为元素数量小于第七预设阈值,则确定该数据键对应的数据值的数据结构体为intset结构体;若比较结果具体为元素数量大于或等于第七预设阈值,则确定该数据键对应的数据值的数据结构体为hashtable结构体。在一种可选的实施方式中,程序510还用于使得处理器502在针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体时:若该数据的数据类型为字符串类型,则判断数据键对应的数据值所包含的每一元素是否符合预设范围;若是,则确定该数据键对应的数据值的数据结构体为int结构体;若否,则确定该数据键对应的数据值的数据结构体为raw结构体。在一种可选的实施方式中,程序510还用于使得处理器502在根据数据结构体对应的内存容量计算算法,计算该数据所占用的内存容量时:针对字符串类型对应的数据结构体,判断数据键对应的数据值所包含的元素是否符合预设范围;若是,则确定该数据键对应的数据值所占用的内存容量为零。在一种可选的实施方式中,程序510还用于使得处理器502执行以下操作:将数据键以及该数据键对应的数据所占用的内存容量反馈至用户。在一种可选的实施方式中,程序510还用于使得处理器502在将数据键以及该数据键对应的数据值所占用的内存容量反馈至用户时:根据预设规则对数据键对应的数据所占用的内存容量进行排序处理;将排序处理后的数据键以及该数据键对应的数据所占用的内存容量反馈至用户在一种可选的实施方式中,数据存储于内存中的redis数据库中。在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的内存占用分析设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。本发明公开了:a1.一种数据的内存占用分析方法,其中,各数据在内存中以数据键值对方式存储,所述方法包括:获得包含内存中存储的各数据的数据文件;对所述数据文件进行数据分析,确定各数据所属的数据类型;针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体;根据所述数据结构体对应的内存容量计算算法,计算该数据所占用的内存容量。a2.根据a1所述的方法,其中,所述获得包含内存中存储的各数据的数据文件进一步包括:将内存中存储的数据进行转存处理,以得到存储于磁盘中的数据文件。a3.根据a1或a2所述的方法,其中,所述数据类型包括以下一种或多种组合:哈希类型、有序集合类型、列表类型、集合类型和/或字符串类型。a4.根据a3所述的方法,其中,所述哈希类型对应的数据结构体包括:zipmap结构体和hashtable结构体;所述有序集合类型对应的数据结构体包括:ziplist结构体和skiplist结构体;所述列表类型对应的数据结构体包括:ziplist结构体和linkedlist结构体;所述集合类型对应的数据结构体包括:intset结构体和hashtable结构体;所述字符串类型对应的数据结构体包括:raw结构体和int结构体。a5.根据a3或a4所述的方法,其中,所述针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体进一步包括:若该数据的数据类型为哈希类型,则将各个数据键对应的数据值所包含的元素数量与第一预设阈值进行比较,以及将每一元素的数据长度与第二预设阈值进行比较,得到比较结果;若比较结果具体为元素数量小于第一预设阈值且每一元素的数据长度均小于第二预设阈值,则确定该数据键对应的数据值的数据结构体为zipmap结构体;若比较结果为其他情况,则确定该数据键对应的数据值的数据结构体为hashtable结构体。a6.根据a3或a4所述的方法,其中,所述针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体进一步包括:若该数据的数据类型为有序集合类型,则将各个数据键对应的数据值所包含的元素数量与第三预设阈值进行比较,以及将每一元素的数据长度与第四预设阈值进行比较,得到比较结果;若比较结果具体为元素数量小于第三预设阈值且每一元素的数据长度均小于第四预设阈值,则确定该数据键对应的数据值的数据结构体为ziplist结构体;若比较结果为其他情况,则确定该数据键对应的数据值的数据结构体为skiplist结构体。a7.根据a3或a4所述的方法,其中,所述针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体进一步包括:若该数据的数据类型为列表类型,则将各个数据键对应的数据值所包含的元素数量与第五预设阈值进行比较,以及将每一元素的数据长度与第六预设阈值进行比较,得到比较结果;若比较结果具体为元素数量小于第五预设阈值且每一元素的数据长度均小于第六预设阈值,则确定该数据键对应的数据值的数据结构体为ziplist结构体;若比较结果为其他情况,则确定该数据键对应的数据值的数据结构体为linkedlist结构体。a8.根据a3或a4所述的方法,其中,所述针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体进一步包括:若该数据的数据类型为集合类型,则将各个数据键对应的数据值所包含的元素数量与第七预设阈值进行比较,得到比较结果;若比较结果具体为元素数量小于第七预设阈值,则确定该数据键对应的数据值的数据结构体为intset结构体;若比较结果具体为元素数量大于或等于第七预设阈值,则确定该数据键对应的数据值的数据结构体为hashtable结构体。a9.根据a3或a4所述的方法,其中,所述针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体进一步包括:若该数据的数据类型为字符串类型,则判断数据键对应的数据值所包含的每一元素是否符合预设范围;若是,则确定该数据键对应的数据值的数据结构体为int结构体;若否,则确定该数据键对应的数据值的数据结构体为raw结构体。a10.根据a3-a9任一项所述的方法,其中,所述根据所述数据结构体对应的内存容量计算算法,计算该数据所占用的内存容量进一步包括:针对所述字符串类型对应的数据结构体,判断数据键对应的数据值所包含的元素是否符合预设范围;若是,则确定该数据键对应的数据值所占用的内存容量为零。a11.根据a1-a10任一项所述的方法,其中,所述方法还包括:将数据键以及该数据键对应的数据所占用的内存容量反馈至用户。a12.根据a11所述的方法,其中,所述将数据键以及该数据键对应的数据所占用的内存容量反馈至用户进一步包括:根据预设规则对数据键对应的数据所占用的内存容量进行排序处理;将排序处理后的数据键以及该数据键对应的数据所占用的内存容量反馈至用户。a13.根据a1-a12中任一项所述的方法,其中,所述数据存储于内存中的redis数据库中。b14.一种数据的内存占用分析装置,其中,各数据在内存中以数据键值对方式存储,所述装置包括:获取模块,适于获得包含内存中存储的各数据的数据文件;数据类型分析模块,适于对所述数据文件进行数据分析,确定各数据所属的数据类型;数据结构体分析模块,适于针对每一数据,依据其数据类型分析该数据键对应的数据值的数据结构体;计算模块,适于根据所述数据结构体对应的内存容量计算算法,计算该数据所占用的内存容量。b15.根据b14所述的装置,其中,所述获取模块进一步适于:将内存中存储的数据进行转存处理,以得到存储于磁盘中的数据文件。b16.根据b14或b15所述的装置,其中,所述数据类型包括以下一种或多种组合:哈希类型、有序集合类型、列表类型、集合类型和/或字符串类型。b17.根据b16所述的装置,其中,所述哈希类型对应的数据结构体包括:zipmap结构体和hashtable结构体;所述有序集合类型对应的数据结构体包括:ziplist结构体和skiplist结构体;所述列表类型对应的数据结构体包括:ziplist结构体和linkedlist结构体;所述集合类型对应的数据结构体包括:intset结构体和hashtable结构体;所述字符串类型对应的数据结构体包括:raw结构体和int结构体。b18.根据b16或b17所述的装置,其中,所述数据结构体分析模块进一步适于:若该数据的数据类型为哈希类型,则将各个数据键对应的数据值所包含的元素数量与第一预设阈值进行比较,以及将每一元素的数据长度与第二预设阈值进行比较,得到比较结果;若比较结果具体为元素数量小于第一预设阈值且每一元素的数据长度均小于第二预设阈值,则确定该数据键对应的数据值的数据结构体为zipmap结构体;若比较结果为其他情况,则确定该数据键对应的数据值的数据结构体为hashtable结构体。b19.根据b16或b17所述的装置,其中,所述数据结构体分析模块进一步适于:若该数据的数据类型为有序集合类型,则将各个数据键对应的数据值所包含的元素数量与第三预设阈值进行比较,以及将每一元素的数据长度与第四预设阈值进行比较,得到比较结果;若比较结果具体为元素数量小于第三预设阈值且每一元素的数据长度均小于第四预设阈值,则确定该数据键对应的数据值的数据结构体为ziplist结构体;若比较结果为其他情况,则确定该数据键对应的数据值的数据结构体为skiplist结构体。b20.根据b16或b17所述的装置,其中,所述数据结构体分析模块进一步适于:若该数据的数据类型为列表类型,则将各个数据键对应的数据值所包含的元素数量与第五预设阈值进行比较,以及将每一元素的数据长度与第六预设阈值进行比较,得到比较结果;若比较结果具体为元素数量小于第五预设阈值且每一元素的数据长度均小于第六预设阈值,则确定该数据键对应的数据值的数据结构体为ziplist结构体;若比较结果为其他情况,则确定该数据键对应的数据值的数据结构体为linkedlist结构体。b21.根据b16或b17所述的装置,其中,所述数据结构体分析模块进一步适于:若该数据的数据类型为集合类型,则将各个数据键对应的数据值所包含的元素数量与第七预设阈值进行比较,得到比较结果;若比较结果具体为元素数量小于第七预设阈值,则确定该数据键对应的数据值的数据结构体为intset结构体;若比较结果具体为元素数量大于或等于第七预设阈值,则确定该数据键对应的数据值的数据结构体为hashtable结构体。b22.根据b16或b17所述的装置,其中,所述数据结构体分析模块进一步适于:若该数据的数据类型为字符串类型,则判断数据键对应的数据值所包含的每一元素是否符合预设范围;若是,则确定该数据键对应的数据值的数据结构体为int结构体;若否,则确定该数据键对应的数据值的数据结构体为raw结构体。b23.根据b22所述的装置,其中,所述计算模块进一步适于:针对所述字符串类型对应的数据结构体,判断数据键对应的数据值所包含的元素是否符合预设范围;若是,则确定该数据键对应的数据值所占用的内存容量为零。b24.根据b14-b23任一项所述的装置,其中,所述装置还包括:反馈模块,适于将数据键以及该数据键对应的数据所占用的内存容量反馈至用户。b25.根据b24所述的装置,其中,所述反馈模块进一步包括:排序处理单元,适于根据预设规则对数据键对应的数据所占用的内存容量进行排序处理;反馈单元,适于将排序处理后的数据键以及该数据键对应的数据所占用的内存容量反馈至用户。b26.根据b14-b25中任一项所述的方法,其中,所述数据存储于内存中的redis数据库中。c27.一种服务器,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如a1-a13中任一项所述的数据的内存占用分析方法对应的操作。d28.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如a1-a13中任一项所述的数据的内存占用分析方法对应的操作。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1