买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】数据缓存方法及装置_南京中兴新软件有限责任公司_201710380595.1 

申请/专利权人:南京中兴新软件有限责任公司

申请日:2017-05-25

公开(公告)日:2019-11-29

公开(公告)号:CN108334460B

主分类号:G06F12/123(20160101)

分类号:G06F12/123(20160101)

优先权:

专利状态码:有效-授权

法律状态:2019.11.29#授权;2018.08.21#实质审查的生效;2018.07.27#公开

摘要:本发明提供了一种数据缓存方法及装置,其中,该方法包括:通过本发明,将缓存链表预先划分为多个区域,多个区域分别用于存储不同重要级别的数据,在接收到待存储数据后,根据当前链表的占用长度,也就是占用比例确定该待存储数据的存储位置,解决了相关技术中存储方式单一的问题,实现了依据当前链表占用情况灵活地将文件存储到不同的区域。

主权项:1.一种数据缓存方法,其特征在于,包括:获取待存储数据;依据当前缓存链表被占用的长度确定所述待存储数据的存储位置,其中,所述存储位置包括:依据所述缓存链表的最大长度预先划分的多个区域;在确定的所述存储位置存储所述待存储数据,所述多个区域由所述缓存链表的头部至尾部包括:第一区域、第二区域,所述第一区域用于存储被频繁访问的数据,对于所述缓存列表的缓存命中数据,如果缓存命中的数据在所述第二区域,则将所述缓存命中的数据迁移至所述缓存列表的头部,并记录此时所述缓存列表所淘汰的数据个数R,记录为r1;如果缓存命中的数据在所述第一区域,则记录此时所述缓存列表所淘汰的数据个数R,记录为r2,如果所述r2和r1之差大于N2,N为所述第一区域的长度,将所述缓存命中的数据迁移至所述缓存列表的链表头部,如果所述r2和r1之差小于或等于N2,保持所述缓存命中的数据的位置不变;其中,依据当前缓存链表被占用的长度确定所述待存储数据的存储位置,在确定的所述存储位置存储所述待存储数据,包括以下之一:在检测到所述当前缓存链表被占用的长度小于等于预设阈值的情况下,将所述待存储数据存储到所述第一区域;在检测到所述当前缓存链表被占用的长度大于所述预设阈值的情况下,将所述待存储数据存储至所述第二区域。

全文数据:数据缓存方法及装置技术领域[0001]本发明涉及通信领域,具体而言,涉及一种数据缓存方法及装置。背景技术[0002]在相关技术中,在大型分布式系统以及虚拟化等领域中,通常借由软件定义存储的方式,将物理存储通常为机械硬盘,或基于机械硬盘的磁阵池化,进行集中管理,达到按需分配,弹性伸缩的目的。[0003]此时,由于需要同时应对来自不同业务的压力,机械硬盘的输入输出IO速度往往成为系统的瓶颈。解决此问题的通常做法是在业务系统和磁盘之间使用高性能的内存或固态硬盘作为IO缓存,尽量把频繁读写的热点数据换入到高性能的缓存中,提高系统的响应速度。常用的缓存调度算法有随机、循环、LRU等三种,其中LRU最近最少使用,LeastRecentlyUsed,简称为LRU是最优的。此处,以LRU为例,说明相关技术中的缓存方式。[0004]LRU算法根据数据的历史访问记录来进行数据淘汰,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。[0005]最常见的实现是使用单链表保存缓存数据,详细算法实现如下参考附图1,图1是根据相关技术中的LRU缓存原理示意图):[0006]1.新数据插入到链表头部;[0007]2.每当缓存命中(即缓存中的数据被访问),则将数据移到链表头部;[0008]3.当链表满的时候,将链表尾部的数据丢弃。[0009]这种方式在读写压力不大时,可以很好的保留热点数据,但有如下缺点:[0010]1数据重复读写时,会导致链表节点的频繁移动,列表维护成本高。[0011]2突发性的批量I0操作会导致LRU链表中的热点数据被冲刷掉,降低缓存的命中率,缓存效果严重下降。[0012]另外的一些LRU改进算法,比如LRU-K、MultiQueue等需要维护两个或多个列表,实现复杂度高。[0013]针对相关技术中数据存储方式单一的向题,目前还没有有效的解决方案。发明内容[0014]本发明实施例提供了一种数据缓存方法及装置,以至少解决相关技术中数据存储方式单一的问题。[0015]根据本发明的一个实施例,提供了一种数据缓存方法,包括:获取待存储数据;依据当前缓存链表被占用的长度确定所述待存储数据的存储位置,其中,所述存储位置包括:依据所述缓存链表的最大长度预先划分的多个区域;在确定的所述存储位置存储所述待存储数据。[0016]可选地,所述多个区域由所述缓存链表的头部至尾部包括:第一区域、第二区域,,所述第一区域用于存储被频繁访问的数据。[0017]可选地,依据当前缓存链表被占用的长度确定所述待存储数据的存储位置,在确定的所述存储位置存储所述待存储数据,包括以下之一:在检测到所述当前缓存链表被占用的长度小于等于预设阈值的情况下,将所述待存储数据存储到所述第一区域;在检测到所述当前缓存链表被占用的长度大于所述预设阈值的情况下,将所述待存储数据存储至所述第二区域;其中,所述预设阈值为所述第一区域的长度。[0018]可选地,在检测到所述当前缓存链表被占用的长度小于等于预设阈值的情况下,将所述待存储数据存储到所述第一区域之后,所述方法还包括:保持所述缓存链表中存储的缓存命中数据的位置不变。[0019]可选地,在检测到所述当前缓存链表被占用的长度大于所述预设阈值的情况下,将所述待存储数据存储至所述第二区域之后,所述方法还包括以下之一:保持所述第一区域和或所述第二区域的头部位置存储的缓存命中数据的位置不变;迁移所述第一区域和或所述第二区域的尾部位置存储的缓存命中数据至所述缓存链表的头部位置。[0020]根据本发明的另一个实施例,提供了一种LRU缓存装置,包括:获取模块,用于获取待存储数据;确定模块,用于依据当前缓存链表被占用的长度确定所述待存储数据的存储位置,其中,所述存储位置包括:依据所述缓存链表的最大长度预先划分的多个区域;存储模块,用于在确定的所述存储位置存储所述待存储数据。[0021]可选地,所述多个区域由所述缓存链表的头部至尾部包括:第一区域、第二区域,所述第一区域用于存储被频繁访问的数据。[0022]可选地,所述确定模块还用于在检测到所述当前缓存链表被占用的长度小于等于预设阈值的情况下,将所述待存储数据存储到所述第一区域;或者,所述确定模块还用于在检测到所述当前缓存链表被占用的长度大于所述预设阈值的情况下,将所述待存储数据存储至所述第二区域;其中,所述预设阈值为所述第一区域的长度。[0023]根据本发明的另一个实施例,提供了一种存储介质,所述存储介质包括存储的程序,其中,所述程序运行时执行上述可选实施例任一项中所述的方法。[0024]根据本发明的另一个实施例,提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述可选实施例任一项中所述的方法。[0025]通过本发明,将缓存链表预先划分为多个区域,多个区域分别用于存储不同重要级别的数据,在接收到待存储数据后,根据当前链表的占用长度,也就是占用比例确定该待存储数据的存储位置,解决了相关技术中存储方式单一的问题,实现了依据当前链表占用情况灵活地将文件存储到不同的区域。附图说明[0026]此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:[0027]图1是根据相关技术中的LRU缓存原理示意图;[0028]图2是本发明实施例的一种数据缓存方法的计算机终端的硬件结构框图;[0029]图3是根据本发明实施例的一种数据缓存方法的流程图;[0030]图4是根据本发明优选实施例的LRU分区缓存流程图。具体实施方式[0031]需要说明的是,下面各个实施例中以LRU链表为例,但是不局限于LRU链表,各个实施例记载的方案也可以应用于随机缓存方法,循环缓存方法等缓存调度算法。[0032]实施例一[0033]本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图2是本发明实施例的一种数据缓存方法的计算机终端的硬件结构框图。如图2所示,计算机终端20可以包括一个或多个(图中仅示出一个处理器202处理器202可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器204、以及用于通信功能的传输装置2〇6。本领域普通技术人员可以理解,图2所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端20还可包括比图2中所示更多或者更少的组件,或者具有与图2所示不同的配置。[0034]存储器204可用于存储应用软件的软件程序以及模块,如本发明实施例中的一种数据缓存方法对应的程序指令模块,处理器202通过运行存储在存储器204内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器204可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器204可进一步包括相对于处理器202远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端20。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。[0035]传输装置206用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端20的通信供应商提供的无线网络。在一个实例中,传输装置206包括一个网络适配器NetworkInterfaceController,NIC,其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置206可以为射频RadioFrequency,RF模块,其用于通过无线方式与互联网进行通讯。[0036]在本实施例中提供了一种运行于上述计算机终端的一种数据缓存方法,图3是根据本发明实施例的一种数据缓存方法的流程图,如图3所示,该流程包括如下步骤:[0037]步骤S302,获取待存储数据;[0038]步骤S3〇4,依据当前LRU链表被占用的长度确定该待存储数据的存储位置,其中,该存储位置包括:依据该LRU链表的最大长度预先划分的多个区域;[0039]步骤S306,在确定的该存储位置存储该待存储数据。[0040]通过上述步骤,将LRU链表预先划分为多个区域,多个区域分别用于存储不同重要级别的数据,在接收到待存储数据后,根据当前链表的占用长度,也就是占用比例确定该待存储数据的存储位置,解决了相关技术中存储方式单一的问题,实现了依据当前链表占用情况灵活地将文件存储到不同的区域。[0041]可选地,该多个区域由该LRU链表的头部至尾部包括:第一区域、第二区域,该第一区域用于存储被频繁访问的数据。需要说明的是,该第一区域用于存储被频繁访问的数据,也可以称为重要的数据,位于链表前部,该重要的数据中在每次终端请求数据时有可能成为缓存命中数据。而缓存命中数据是指在终端每次请求数据时可以直接从缓存中获取,而不用向服务器获取,该部分可以直接从缓存中获取的数据称为缓存命中数据。[0042]可选地,依据当前LRU链表被占用的长度确定该待存储数据的存储位置,在确定的该存储位置存储该待存储数据,包括以下之一:在检测到该当前LRU链表被占用的长度小于等于预设阈值的情况下,将该待存储数据存储到该第一区域;在检测到该当前LRU链表被占用的长度大于该预设阈值的情况下,将该待存储数据存储至该第二区域。优选地,该预设阈值为该第一区域的长度。需要说明的是,本实施例中给出的是将LRU链表分为两个区域的情况,如果分为多个区域,则在当前LRU链表剩余存储空间足够的情况下,可以将待存储数据任意存储,但是,如果在当前LRU链表剩余存储空间不足的情况下,则一定要将该待存储数据避开存储重要数据的位置,以免将重要数据顶出链表。[0043]可选地,在检测到该当前LRU链表被占用的长度小于等于预设阈值的情况下,将该待存储数据存储到该第一区域之后,该方法还包括:保持该LRU链表中存储的缓存命中数据的位置不变。需要说明的是,当前LRU链表被占用的长度小于预设阈值,则表示当前LRU链表有足够的存储空间,此时可以将待存储数据存储到第一区域的头部,或者存储到其他区域也都是可以的,并不会影响重要数据的存储。即由于链表空间足够,将新数据存储到当前链表头部后,只是在缓存命中数据的链表前部增加了新数据,并不会将缓存命中向后冲刷,缓存命中数据的实际存储位置是保持不变的,与缓存命中数据关联的指针也不需要更新。即不是像相关技术中一样,在链表头部存储新数据后,将缓存命中数据重新迁移至链表头部。[0044]可选地,在检测到该当前LRU链表被占用的长度大于该预设阈值的情况下,将该待存储数据存储至该第二区域之后,该方法还包括以下之一:保持该第一区域和或该第二区域的头部位置存储的缓存命中数据的位置不变;迁移该第一区域和或该第二区域的尾部位置存储的缓存命中数据至该LRU链表的头部位置。需要补充的是,此处的保持缓存数据的位置不变与上一个可选实施例是相同的含义。[0045]下面结合本发明优选实施例进行详细说明。[0046]本优选实施例提出了一种改进的最近最少使用(LeastRecentlyUsed,简称为LRU算法,解决背景技术中记载的单链表LRU的两个缺点,保证缓存在突发性的批量IO操作下,热点数据不被冲刷掉,提高命中率,同时避免链表结点频繁移动。[0047]为实现上述目标,本优选实施例实现步骤如下:[0048]假设LRU链表的最大长度为MAX,图4是根据本发明优选实施例的LRU分区缓存流程图,如图4所示,将LRU链表分成两个逻辑区段:稳定区域stablearea长度N,相当于上述是实施例中的第一区域和变量区域variablearea长度MAX-N,相当于上述是实施例中的第二区域),stablearea位于LRU链表头部,存储频繁访问的数据。variablearea为LRU链表中的剩余部分。[0049]当向LRU链表的头部插入新数据时,链表中的己有数据逐步后移,在超出长度N时,由stablearea进入variablearea,并最终在超出MAX时被丢弃。[0050]LRU链表中数据迁移过程如下:[0051]当前链表长度len当前链表长度即当前链表被占用的长度小于等于N时:[0052]步骤A:新数据插入到LRU链表的头部也即上述稳定区域的头部),[0053]步骤B:缓存命中的数据位置不变。[0054]当前链表长度len大于N时:[0055]步骤C:新数据插入到variablearea头部,LUUt,6J步骤D:缓存命中的数据如果在variablearea或在stablearea的尾部,则将其迁移到LRU链表头部,反之数据位置不变。[0057]下面是本发明优选实施例的具体实施方式[0058]当当前链表长度len小于等于N时:[0059]1•新数据插入到链表头部[0060]2.对于链表中存储的缓存命中数据,不移动其位置。此时LRU空闲长度足够,数据没有被淘汰的风险。[0061]当当前链表的长度len大于N时:[0062]1•可以LRU链表被分成两个区:stablearea和variablearea。同时,为LRU链表增加淘汰计数值R,每从LRU尾部丢弃一条数据时,R值加丄。[0063]2•新数据插入到variablearea的头部。这样当发生突发性的批量IO请求时,只有variablearea的数据被逐步冲刷掉,不影响stablearea的数据,这样LRU链表中大部分的热点数据不会丢失,保证了LRU数据的命中率。[00M]3•对于链表中的缓存命中数据,又分以下两种情况:[0065]1如果命中的数据在variablearea,则把它迀移到LRU链表的头部;同时,为该数据记录此时LRU链表淘汰的数据个数R值,记为rl。[0066]2如果命中的数据在stablearea,为该数据记录此时LRU链表淘汰的数据个数R值,记为r2。如果r2-rlN2,(此处的rl为上一次命中该数据时,LRU链表淘汰的数据个数)说明该数据在2次被访问的中间时间段内,该数据已在stablearea移动超过半程,在下次访问前,有迁移到variablearea的风险。因此,把缓存命中数据重新迁移到LRU链表头部,并重新记录rl等于r2;反之,说明该数据距离variablearea足够远,保持该数据的位置不变。[0067]通过上述方案,本发明优选实施例的有益效果在,提出了一种单链表LRU分区缓存方案,在链表存储空间不够时,存储新数据时避开重要数据,保证了重要数据一直位于链表内,不需要总是将重要数据从尾部迁移到头部,解决了数据重复读写时,链表节点频繁移动的问题,减少了系统资源开销;以及突发性的批量IO操作所导致的LRU链表中的热点数据被冲刷掉,降低缓存的命中率的问题。[0068]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如R0MRAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备可以是手机,计算机,服务器,或者网络设备等执行本发明各个实施例所述的方法。[0069]实施例二[0070]在本实施例中还提供了一种LRU缓存装置,该装置用于实现上述实施例及优选实施方式,己经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。[0071]根据本发明的另一个实施例,提供了一种LRU缓存装置,包括:获取模块,用于获取待存储数据;确定模块,用于依据当前LRU链表被占用的长度确定该待存储数据的存储位置,其中,该存储位置包括:依据该LRU链表的最大长度预先划分的多个区域;存储模块,用于在确定的该存储位置存储该待存储数据。[0072]可选地,该多个区域由该LRU链表的头部至尾部包括:第一区域、第二区域,该第一区域用于存储被频繁访问的数据。[0073]可选地,该确定模块还用于在检测到该当前LRU链表被占用的长度小于等于预设阈值的情况下,将该待存储数据存储到该第一区域;或者,该确定模块还用于在检测到该当前LRU链表被占用的长度大于该预设阈值的情况下,将该待存储数据存储至该第二区域;其中,该预设阈值为该第一区域的长度。[0074]需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。[0075]实施例三[0076]根据本发明的另一个实施例,提供了一种存储介质,该存储介质包括存储的程序,其中,该程序运行时执行上述可选实施例任一项中所述的方法。[0077]可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器R0M,Read-OnlyMemory、随机存取存储器RAM,RandomAccessMemory、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。[0078]可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。[0079]实施例四[0080]根据本发明的另一个实施例,提供了一种处理器,该处理器用于运行程序,其中,该程序运行时执行上述可选实施例任一项中所述的方法。[0081]显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。[0082]以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

权利要求:1.一种数据缓存方法,其特征在于,包括:获取待存储数据;依据当前缓存链表被占用的长度确定所述待存储数据的存储位置,其中,所述存储位置包括:依据所述缓存链表的最大长度预先划分的多个区域;在确定的所述存储位置存储所述待存储数据。2.根据权利要求1所述的方法,其特征在于,所述多个区域由所述缓存链表的头部至尾部包括:第一区域、第二区域,所述第一区域用于存储被频繁访问的数据。3.根据权利要求2所述的方法,其特征在于,依据当前缓存链表被占用的长度确定所述待存储数据的存储位置,在确定的所述存储位置存储所述待存储数据,包括以下之一:在检测到所述当前缓存链表被占用的长度小于等于预设阈值的情况下,将所述待存储数据存储到所述第一区域;在检测到所述当前缓存链表被占用的长度大于所述预设阈值的情况下,将所述待存储数据存储至所述第二区域。4.根据权利要求3所述的方法,其特征在于,在检测到所述当前缓存链表被占用的长度小于等于预设阈值的情况下,将所述待存储数据存储到所述第一区域之后,所述方法还包括:保持所述缓存链表中存储的缓存命中数据的位置不变。5.根据权利要求3所述的方法,其特征在于,在检测到所述当前缓存链表被占用的长度大于所述预设阈值的情况下,将所述待存储数据存储至所述第二区域之后,所述方法还包括以下之一:保持所述第一区域和或所述第二区域的头部位置存储的缓存命中数据的位置不变;迀移所述第一区域和或所述第二区域的尾部位置存储的缓存命中数据至所述缓存链表的头部位置。6.—种数据缓存装置,其特征在于,包括:获取模块,用于获取待存储数据;确定模块,用于依据当前缓存链表被占用的长度确定所述待存储数据的存储位置,其中,所述存储位置包括:依据所述缓存链表的最大长度预先划分的多个区域;存储模块,用于在确定的所述存储位置存储所述待存储数据。7.根据权利要求6所述的装置,其特征在于,所述多个区域由所述缓存链表的头部至尾部包括:第一区域、第二区域,所述第一区域用于存储被频繁访问的数据。8.根据权利要求7所述的装置,其特征在于,所述确定模块还用于在检测到所述当前缓存链表被占用的长度小于等于预设阈值的情况下,将所述待存储数据存储到所述第一区域;或者,所述确定模块还用于在检测到所述当前缓存链表被占用的长度大于所述预设阈值的情况下,将所述待存储数据存储至所述第二区域。9.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,所述程序运行时执行上述权利要求1至5任一项中所述的方法。10.—种处理器,其特征在于,所述处理器用于运行程序,其中,所述程序运行时执行上述权利要求1至5任一项中所述的方法。

百度查询: 南京中兴新软件有限责任公司 数据缓存方法及装置

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。