本发明涉及计算机技术领域,具体涉及一种基于多个缓存的数据淘汰方法及装置。
背景技术:
缓存(Cache)是一种为了解决高、低速设备之间速度不匹配而采用的一项重要技术,广泛应用于各种领域如存储系统、数据库、网页(web)服务器、处理器、文件系统、磁盘系统等,可以减少应用响应时间、提升效率。但是,实现Cache技术所用到的存储介质如RAM、SSD等,在具有更高性能的同时,价格也较昂贵,出于性价比的考虑,Cache的容量大小受到限制,因此需要有效的管理Cache空间,于是出现了多种Cache淘汰算法,例如:最近最少使用(Least Recently Used,简称LRU)淘汰算法;最近最不频繁使用(Least Frequently Used,简称LFU)淘汰算法;最近最多使用(Most Recently Used,简称MRU)淘汰算法;自适应Cache(Adaptive Replacement Cache,简称ARC)淘汰算法等。
但是,发明人在实现本发明的过程中,发现在现有技术中至少存在如下问题:现有技术的淘汰算法一般为单线程处理方式,处理效率较低,而且较低的处理效率有时会导致有限的缓存空间被用完后不能及时腾空,无法及时地存储后续数据。
技术实现要素:
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种基于多个缓存的数据淘汰方法及相应的装置。
根据本发明的一个方面,提供了一种基于多个缓存的数据淘汰方法,包括:按照预设的等级划分规则划分多个缓存等级,分别为各个缓存等级创建匹配的线程池;其中,每个线程池中包含多个线程;利用各个线程池中的多个线程分别扫描各个缓存,根据扫描结果以及等级划分规则确定各个缓存的缓存等级;利用每个线程池中的多个线程对缓存等级与该线程池匹配的缓存内的数据进行淘汰。
优选的,该方法进一步包括:为各个线程池分别设置对应的权重值,根据各个线程池的权重值设置各个线程池内包含的线程的数量;其中,线程池的权重值越大,线程池内包含的线程的数量越多。
优选的,为各个线程池分别设置对应的权重值,根据各个线程池的权重值设置各个线程池内包含的线程的数量的步骤具体包括:定期获取各个线程池的扫描结果,根据扫描结果确定各个缓存等级对应的缓存数量;根据各个缓存等级对应的缓存数量调整各个线程池的权重值,并根据各个线程池调整后的权重值调整各个线程池内包含的线程的数量;其中,缓存等级对应的缓存数量越多,与该缓存等级匹配的线程池的权重值越大。
优选的,为各个线程池分别设置对应的权重值的步骤进一步包括:针对每个线程池,根据与该线程池匹配的缓存等级的高低设置该线程池对应的权重值;其中,与该线程池匹配的缓存等级越高,该线程池的权重值越大。
优选的,预设的等级划分规则包括:按照缓存的剩余存储空间与总存储空间之间的比值划分缓存等级,其中,剩余存储空间与总存储空间之间的比值越大,缓存等级越高。
优选的,利用每个线程池中的多个线程对缓存等级与该线程池匹配的缓存内的数据进行淘汰的步骤具体包括:根据缓存内的各个数据的写入总次数以及预设的温度属性计算规则,计算缓存内的各个数据的温度属性值,并根据温度属性值确定缓存内的各个数据的淘汰顺序。
优选的,各个线程池之间相互并行运行。
根据本发明的另一方面,提供了一种基于多个缓存的数据淘汰装置,包括:划分模块,用于按照预设的等级划分规则划分多个缓存等级,分别为各个缓存等级创建匹配的线程池;其中,每个线程池中包含多个线程;扫描模块,用于利用各个线程池中的多个线程分别扫描各个缓存,根据扫描结果以及等级划分规则确定各个缓存的缓存等级;淘汰模块,用于利用每个线程池中的多个线程对缓存等级与该线程池匹配的缓存内的数据进行淘汰。
优选的,该装置进一步包括:权重模块,用于为各个线程池分别设置对应的权重值,根据各个线程池的权重值设置各个线程池内包含的线程的数量;其中,线程池的权重值越大,线程池内包含的线程的数量越多。
优选的,权重模块具体用于:定期获取各个线程池的扫描结果,根据扫描结果确定各个缓存等级对应的缓存数量;根据各个缓存等级对应的缓存数量调整各个线程池的权重值,并根据各个线程池调整后的权重值调整各个线程池内包含的线程的数量;其中,缓存等级对应的缓存数量越多,与该缓存等级匹配的线程池的权重值越大。
优选的,权重模块进一步用于:针对每个线程池,根据与该线程池匹配的缓存等级的高低设置该线程池对应的权重值;其中,与该线程池匹配的缓存等级越高,该线程池的权重值越大。
优选的,预设的等级划分规则包括:按照缓存的剩余存储空间与总存储空间之间的比值划分缓存等级,其中,剩余存储空间与总存储空间之间的比值越大,缓存等级越高。
优选的,淘汰模块具体用于:根据缓存内的各个数据的写入总次数以及预设的温度属性计算规则,计算缓存内的各个数据的温度属性值,并根据温度属性值确定缓存内的各个数据的淘汰顺序。
优选的,各个线程池之间相互并行运行。
根据本发明的一种基于多个缓存的数据淘汰方法及装置可以按照预设的等级划分规则划分多个缓存等级,分别为各个缓存等级创建匹配的线程池;利用各个线程池中的多个线程分别扫描各个缓存,根据扫描结果以及等级划分规则确定各个缓存的缓存等级;利用每个线程池中的多个线程对缓存等级与该线程池匹配的缓存内的数据进行淘汰。由此可见,通过将缓存划分为多个缓存等级,并分别针对各个缓存等级创建对应的线程池,能够更好地根据缓存等级调整线程池中的线程数量;并且,通过多个线程池并行处理的方式大大提高了数据淘汰处理效率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是本发明实施例一的一种基于多个缓存的数据淘汰方法的流程示意图;
图2是本发明实施例二的一种基于多个缓存的数据淘汰方法的流程示意图;
图3是本发明实施例三的一种基于多个缓存的数据淘汰装置的结构示意图;
图4是本发明实施例四的一种基于多个缓存的数据淘汰装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
实施例一
图1示出了本发明实施例一提供的一种基于多个缓存的数据淘汰方法的流程示意图,如图所示,该方法包括:
步骤S110:按照预设的等级划分规则划分多个缓存等级,分别为各个缓存等级创建匹配的线程池。
其中,预设的等级划分规则用于将各个缓存根据其不同的使用情况来划分成不同等级,同一等级内的各个缓存具有相近的使用情况。该等级是由技术人员人为划定的。对于预设的等级划分规则的具体内容,本发明实施例一对此不作具体限定,本领域技术人员可以根据实际情况灵活设定。
为了提高数据淘汰的处理效率,分别为各个缓存等级创建匹配的线程池,每个线程池中都包含多个线程。每个线程池中的多个线程均用于对应等级的缓存的数据淘汰处理。因为不同等级的缓存的使用情况不一样,为了尽可能地优化资源配置,所以不同等级对应的线程池中的线程个数也可以不同。
之所以采用线程池技术,是因为如果为每一个缓存都设置相应的线程进行处理,将消耗大量系统资源,不具有现实操作性。
步骤S120:利用各个线程池中的多个线程分别扫描各个缓存,根据扫描结果以及等级划分规则确定各个缓存的缓存等级。
因为当多个线程对所有的缓存进行数据淘汰处理时,如果不对线程与缓存的匹配关系进行限定,就可能出现两个线程对同一个缓存同时进行处理的情况,此时,两个线程就会产生冲突,导致一系列问题。所以,本发明实施例通过对所有缓存进行等级划分,并规定各个线程与不同等级的缓存的对应处理关系,从而有效避免了上述冲突情况的发生,优化了工作流程。
具体地,利用各个线程池中的多个线程,分别扫描各个缓存,根据扫描结果和等级划分规则为每一个被扫描过的缓存确定缓存等级,用于后续具有针对性的处理。
步骤S130:利用每个线程池中的多个线程对缓存等级与该线程池匹配的缓存内的数据进行淘汰。
具体地,根据步骤S120确定的缓存等级,利用与各个缓存等级相匹配的线程池中的多个线程对具有对应缓存等级的缓存进行数据淘汰处理。对于数据淘汰处理的具体方法,本发明实施例一对此不作具体限定,本领域技术人员可以根据实际情况灵活设定。
由此可见,本发明实施例提供的一种基于多个缓存的数据淘汰方法可以按照预设的等级划分规则划分多个缓存等级,分别为各个缓存等级创建匹配的线程池;利用各个线程池中的多个线程分别扫描各个缓存,根据扫描结果以及等级划分规则确定各个缓存的缓存等级;利用每个线程池中的多个线程对缓存等级与该线程池匹配的缓存内的数据进行淘汰。由此可见,通过将缓存划分为多个缓存等级,并分别针对各个缓存等级创建对应的线程池,能够更好地根据缓存等级调整线程池中的线程数量;并且,通过多个线程池并行处理的方式大大提高了数据淘汰处理效率。
实施例二
图2示出了本发明实施例二提供的一种基于多个缓存的数据淘汰方法的流程示意图,如图所示,该方法包括:
步骤S210:按照预设的等级划分规则划分多个缓存等级,分别为各个缓存等级创建匹配的线程池。
其中,预设的等级划分规则用于将各个缓存根据其不同的使用情况来划分成不同等级,同一等级内的各个缓存具有相近的使用情况。在本发明实施例中,该等级划分规则包括:按照缓存的剩余存储空间与总存储空间之间的比值划分缓存等级,其中,剩余存储空间与总存储空间之间的比值越大,缓存等级越高;剩余存储空间与总存储空间之间的比值越小,缓存等级越低。例如,假设缓存等级分为三级,分别为高(HIGH)级别、低(LOW)级别和空闲(IDLE)级别,其中,将缓存的剩余存储空间与总存储空间之间的比值在60%以上的缓存确定为HIGH级别;将缓存的剩余存储空间与总存储空间之间的比值在30%与60%之间的缓存确定为LOW级别;将缓存的剩余存储空间与总存储空间之间的比值在30%以下的缓存确定为IDLE级别。
为了提高数据淘汰的处理效率,分别为各个缓存等级创建匹配的线程池,每个线程池中都包含多个线程。每个线程池中的多个线程均用于对应等级的缓存的数据淘汰处理。因为不同等级的缓存的使用情况不一样,为了尽可能地优化资源配置,所以不同等级对应的线程池中的线程个数也不相同。
步骤S220:为各个线程池分别设置对应的权重值,根据各个线程池的权重值设置各个线程池内包含的线程的数量。
对于权重值的具体设定方法,可以是针对每个线程池,根据与该线程池匹配的缓存等级的高低设置该线程池对应的权重值,其中,与该线程池匹配的缓存等级越高,该线程池的权重值越大;相反的,与该线程池匹配的缓存等级越低,该线程池的权重值也就越小。其中,线程池的权重值越大,线程池内包含的线程的数量越多;线程池的权重值越小,线程池内包含的线程的数量就越少。因此,每个线程池内包含的线程数量都是动态变化的。
步骤S230:利用各个线程池中的多个线程分别扫描各个缓存,根据扫描结果以及等级划分规则确定各个缓存的缓存等级。
因为当多个线程对所有的缓存进行数据淘汰处理时,如果不对线程与缓存的匹配关系进行限定,就会出现两个线程对同一个缓存进行处理的情况,此时,两个线程就会产生冲突,导致一系列问题。所以,本发明实施例通过对所有缓存进行等级划分,并规定各个线程与不同等级的缓存的对应处理关系,从而有效避免了上述冲突情况的发生,优化了工作流程。
具体地,利用各个线程池中的多个线程,分别扫描各个缓存,根据扫描结果和等级划分规则为每一个被扫描过的缓存确定缓存等级,用于后续具有针对性的处理。
相应地,对于线程池的权重值的设定方法还可以包括:定期获取各个线程池的扫描结果,根据扫描结果确定各个缓存等级对应的缓存数量;然后根据各个缓存等级对应的缓存数量调整各个线程池的权重值,并根据各个线程池调整后的权重值调整各个线程池内包含的线程的数量。其中,缓存等级对应的缓存数量越多,与该缓存等级匹配的线程池的权重值越大;相反的,缓存等级对应的缓存数量越少,与该缓存等级匹配的线程池的权重值越小。通过缓存数量来确定线程池的权重值,从而决定每个线程池中包含的线程数量,可以使得每个线程池中的线程数量能够准确地满足对应缓存等级中各个缓存的处理操作,使资源得到合理使用,节省成本。
在其他实施例中,还可以综合采用步骤S220和步骤S230中提供的线程池的权重值设定方法,从而设置更加合理的线程池的权重值。另外,线程池的权重值还可以进一步根据对应等级的缓存的类型、重要程度等多种因素进行确定。
步骤S240:利用每个线程池中的多个线程对缓存等级与该线程池匹配的缓存内的数据进行淘汰。
具体地,根据上述步骤确定的缓存等级,利用与各个缓存等级相匹配的线程池中的多个线程对具有对应缓存等级的缓存进行数据淘汰处理。其中,每个线程池可以仅处理一个缓存等级的缓存,例如,步骤S210中将缓存分为HIGH级别、LOW级别和IDLE级别一共三个级别,所以仅需三个线程池与之对应。具体的,线程池1对应HIGH级别,线程池2对应LOW级别,线程池3对应IDLE级别,在这种情况下,线程池1中的所有线程仅处理HIGH级别中的所有缓存,线程池2中所有线程仅处理LOW级别中的所有缓存,线程池3中所有线程仅处理IDLE级别中的所有缓存。当然,当缓存等级较多时,每个线程池也可以用于处理多个缓存等级的缓存。例如,当缓存等级包括六个级别时,也可以由三个线程池进行处理,每个线程池分别处理两个等级的缓存。
总之,通过缓存等级的划分以及线程池技术的应用,能够更加灵活地实现缓存的扫描及数据淘汰工作。另外,上述的步骤S230以及步骤S240均可以反复多次执行,例如,步骤S230可以每隔预设的第一时间间隔执行一次,步骤S240可以每隔预设的第二时间间隔执行一次。其中,第一时间间隔与第二时间间隔可以相等,也可以不等。另外,第一时间间隔和第二时间间隔既可以是固定值,也可以是动态变化的数值。例如,第一时间间隔可以根据扫描结果进行动态调整:当扫描结果中HIGH级别的缓存数量较多时,缩小第一时间间隔;当扫描结果中HIGH级别的缓存数量较少时,增大第一时间间隔。另外,在步骤S240的每次执行过程中,各个线程池既可以按照相同的执行周期对相应等级的缓存执行淘汰操作,也可以按照不同的执行周期对相应等级的缓存执行淘汰操作。例如,用于处理HIGH级别的缓存的线程池可以按照较短的执行周期进行数据淘汰操作,以防止HIGH级别的缓存的可用空间不足;用于处理IDLE级别的缓存的线程池可以按照较长的执行周期进行数据淘汰操作,以节省系统开销。总之,本领域技术人员可根据实际需要灵活采用各种方式确定上述的步骤S230以及步骤S240的执行次数以及执行时机,本发明对此不做限定。由此可见,通过缓存等级的划分以及线程池技术的应用,为数据淘汰操作提供了更多的灵活性和可控性,能够满足各类场景的需求。
在本发明实施例中,进行数据淘汰的具体方法可以由本领域技术人员灵活设置,本发明对此不做限定。例如,可以根据数据写入时间、数据写入次数、数据温度属性、数据类型等多种因素进行淘汰。在本实施例中,数据淘汰方法可以是:根据缓存内的各个数据的写入总次数以及预设的温度属性计算规则,计算缓存内的各个数据的温度属性值,并根据温度属性值确定缓存内的各个数据的淘汰顺序。
其中,预设的温度属性计算规则为本领域技术人员根据实际情况所设置的计算各个缓存数据的热门程度的规则。在这里,缓存数据的热门程度可以通过缓存数据被写入的总次数、和/或缓存数据的存储时段等因素进行确定。具体地,在计算各个缓存数据的温度属性值时,可以单独根据各个缓存数据的写入总次数计算各个缓存数据的温度属性值;也可以进一步结合其他因素计算各个缓存数据的温度属性值。本发明对温度属性值的具体计算规则不做限定,只要能够满足用户的实际需求即可。
在计算出各个缓存数据的温度属性值之后,按照上述计算的温度属性值从低到高的顺序,依次淘汰温度属性值最低的缓存数据,以此实现根据缓存数据热门程度来淘汰数据的效果,并且及时有效地释放缓存空间。
另外,本领域技术人员还可以对上述方案进行各种改动和变形。例如,在根据写入总次数确定温度属性时,除了直接根据写入总次数的数值进行确定外,还可以预先将写入总次数划分为多个数值区间,为各个数值区间分别设置对应的区间分值,并根据该区间分值确定温度属性值。例如,当写入总次数属于【0,10】这一数值区间时,区间分值为1;当写入总次数属于【10,50】这一数值区间时,区间分值为5;当写入总次数属于【50,100】这一数值区间时,区间分值为10。通过区间分值能够更加灵活地将写入总次数位于某一区间内的数据确定为热门数据。而且,为了使数据淘汰方式更为灵活,上述预设的温度属性计算规则还可以包括:预先将缓存对应的缓存时长进一步划分为多个缓存时段,为各个缓存时段分别设置对应的时段权重值;针对每个缓存数据,根据该缓存数据各次写入时对应的缓存时段的时段权重值确定该缓存数据的温度属性值。缓存时长可以为:由缓存中写入时间最早的数据所对应的第一数据写入时间和写入时间最晚的数据所对应的第二数据写入时间所界定的时间长度。而且,缓存时长也可以是预先设定的时间长度,例如,假设一个缓存专用于存储最近的三小时之内的缓存数据,一旦写入缓存的缓存数据的写入时间超过三小时则会自动删除,则该缓存的缓存时长为3小时。在将缓存时长划分为多个缓存时段时,可以将整个缓存时长划分为多个均等的缓存时段,也可以将整个缓存时长划分为多个不等的缓存时段。为了便于根据缓存时段计算缓存数据的温度属性,在进行上述划分之后,可选地,还可以分别针对每个缓存时段设置与该缓存时段对应的时段数据表,其中,各个时段数据表用于记录相应的缓存时段内写入的缓存数据。为了便于根据缓存时段确定缓存数据的淘汰顺序,在本实施例中,还需要为上述划分的各个缓存时段设置对应的时段权重值,其设置方式也是多样的。具体地,可以将各个时段的权重值设置为均等的,这样更侧重于从各个缓存数据出现的次数这一方面去计算缓存数据的温度属性值;或者,也可以按照缓存时段在时间上从前往后的顺序对应地设置递增的(或递减的)时段权重值,这样侧重于将缓存数据的出现次数与写入时间进行结合来计算各个缓存的数据的温度属性值。在这里,各个时段的权重值设置由本领域技术人员根据实际情况而定,本发明对此不作限制。总之,通过缓存时段以及时段权重值的设置方式,使用户能够根据实际需求优先淘汰非重要时段内的数据,使淘汰方案更为灵活。
另外,上述预设的等级划分规则除了可以按照存储空间进行划分外,还可以进一步根据缓存内存储的数据类型等其他因素进行划分,总之,本发明对缓存等级的划分方式以及线程池的权重设置方式不做限定。
在本发明实施例中,上述各个线程池之间均相互并行运行,由此可以使数据处理效率进一步提高。
由此可见,本发明实施例二提供的一种基于多个缓存的数据淘汰方法可以按照预设的等级划分规则划分多个缓存等级,分别为各个缓存等级创建匹配的线程池;利用各个线程池中的多个线程分别扫描各个缓存,根据扫描结果以及等级划分规则确定各个缓存的缓存等级;利用每个线程池中的多个线程对缓存等级与该线程池匹配的缓存内的数据进行淘汰。由此解决了现有技术中单线程处理效率低下的问题,实现了在不同权重的缓存集合上多线程并行同时进行数据淘汰操作,在保证一致性的同时大大提高了数据淘汰处理效率,同时,通过对线程池的改进,可以在并行的同时保证缓存集合的淘汰优先级。
实施例三
图3示出了本发明实施例三提供的一种基于多个缓存的数据淘汰装置的结构示意图,如图所示,该装置包括:划分模块310、扫描模块320和淘汰模块330。
划分模块310,用于按照预设的等级划分规则划分多个缓存等级,分别为各个缓存等级创建匹配的线程池。
其中,预设的等级划分规则用于将各个缓存根据其不同的使用情况来划分成不同等级,同一等级内的各个缓存具有相近的使用情况。该等级是由技术人员人为划定的。对于预设的等级划分规则的具体内容,本发明实施例三对此不作具体限定,本领域技术人员可以根据实际情况灵活设定。
为了提高数据淘汰的处理效率,划分模块310分别为各个缓存等级创建匹配的线程池,每个线程池中都包含多个线程。每个线程池中的多个线程均用于对应等级的缓存的数据淘汰处理。因为不同等级的缓存的使用情况不一样,为了尽可能地优化资源配置,所以不同等级对应的线程池中的线程个数也可以不同。
之所以采用线程池技术,是因为如果为每一个缓存都设置相应的线程进行处理,将消耗大量系统资源,不具有现实操作性。
扫描模块320,用于利用各个线程池中的多个线程分别扫描各个缓存,根据扫描结果以及等级划分规则确定各个缓存的缓存等级。
因为当多个线程对所有的缓存进行数据淘汰处理时,如果不对线程与缓存的匹配关系进行限定,就可能出现两个线程对同一个缓存同时进行处理的情况,此时,两个线程就会产生冲突,导致一系列问题。所以,本发明实施例通过对所有缓存进行等级划分,并规定各个线程与不同等级的缓存的对应处理关系,从而有效避免了上述冲突情况的发生,优化了工作流程。
具体地,扫描模块320利用各个线程池中的多个线程,分别扫描各个缓存,根据扫描结果和等级划分规则为每一个被扫描过的缓存确定缓存等级,用于后续具有针对性的处理。
淘汰模块330,用于利用每个线程池中的多个线程对缓存等级与该线程池匹配的缓存内的数据进行淘汰。
具体地,根据扫描模块320确定的缓存等级,淘汰模块330利用与各个缓存等级相匹配的线程池中的多个线程对具有对应缓存等级的缓存进行数据淘汰处理。对于数据淘汰处理的具体方法,本发明实施例三对此不作具体限定,本领域技术人员可以根据实际情况灵活设定。
关于上述各个模块的具体结构和工作原理可参照方法实施例中相应部分的描述,此处不再赘述。
由此可见,本发明实施例提供的一种基于多个缓存的数据淘汰装置可以按照预设的等级划分规则划分多个缓存等级,分别为各个缓存等级创建匹配的线程池;利用各个线程池中的多个线程分别扫描各个缓存,根据扫描结果以及等级划分规则确定各个缓存的缓存等级;利用每个线程池中的多个线程对缓存等级与该线程池匹配的缓存内的数据进行淘汰。由此可见,通过将缓存划分为多个缓存等级,并分别针对各个缓存等级创建对应的线程池,能够更好地根据缓存等级调整线程池中的线程数量;并且,通过多个线程池并行处理的方式大大提高了数据淘汰处理效率。
实施例四
图4示出了本发明实施例四提供的一种基于多个缓存的数据淘汰装置的结构示意图,如图所示,该装置包括:划分模块410、权重模块420、扫描模块430和淘汰模块440。
划分模块410,用于按照预设的等级划分规则划分多个缓存等级,分别为各个缓存等级创建匹配的线程池。
其中,预设的等级划分规则用于将各个缓存根据其不同的使用情况来划分成不同等级,同一等级内的各个缓存具有相近的使用情况。在本发明实施例中,该等级划分规则包括:按照缓存的剩余存储空间与总存储空间之间的比值划分缓存等级,其中,剩余存储空间与总存储空间之间的比值越大,缓存等级越高;剩余存储空间与总存储空间之间的比值越小,缓存等级越低。例如,假设缓存等级分为三级,分别为高(HIGH)级别、低(LOW)级别和空闲(IDLE)级别,其中,将缓存的剩余存储空间与总存储空间之间的比值在60%以上的缓存确定为HIGH级别;将缓存的剩余存储空间与总存储空间之间的比值在30%与60%之间的缓存确定为LOW级别;将缓存的剩余存储空间与总存储空间之间的比值在30%以下的缓存确定为IDLE级别。
为了提高数据淘汰的处理效率,划分模块410分别为各个缓存等级创建匹配的线程池,每个线程池中都包含多个线程。每个线程池中的多个线程均用于对应等级的缓存的数据淘汰处理。因为不同等级的缓存的使用情况不一样,为了尽可能地优化资源配置,所以不同等级对应的线程池中的线程个数也不相同。
权重模块420,用于为各个线程池分别设置对应的权重值,根据各个线程池的权重值设置各个线程池内包含的线程的数量。
对于权重值的具体设定方法,可以是针对每个线程池,权重模块420根据与该线程池匹配的缓存等级的高低设置该线程池对应的权重值,其中,与该线程池匹配的缓存等级越高,该线程池的权重值越大;相反的,与该线程池匹配的缓存等级越低,该线程池的权重值也就越小。其中,线程池的权重值越大,线程池内包含的线程的数量越多;线程池的权重值越小,线程池内包含的线程的数量就越少。因此,每个线程池内包含的线程数量都是动态变化的。
扫描模块430,用于利用各个线程池中的多个线程分别扫描各个缓存,根据扫描结果以及等级划分规则确定各个缓存的缓存等级。
因为当多个线程对所有的缓存进行数据淘汰处理时,如果不对线程与缓存的匹配关系进行限定,就会出现两个线程对同一个缓存进行处理的情况,此时,两个线程就会产生冲突,导致一系列问题。所以,本发明实施例通过对所有缓存进行等级划分,并规定各个线程与不同等级的缓存的对应处理关系,从而有效避免了上述冲突情况的发生,优化了工作流程。
具体地,扫描模块430利用各个线程池中的多个线程,分别扫描各个缓存,根据扫描结果和等级划分规则为每一个被扫描过的缓存确定缓存等级,用于后续具有针对性的处理。
相应地,对于线程池的权重值的设定方法还可以包括:定期获取各个线程池的扫描结果,根据扫描结果确定各个缓存等级对应的缓存数量;然后根据各个缓存等级对应的缓存数量调整各个线程池的权重值,并根据各个线程池调整后的权重值调整各个线程池内包含的线程的数量。其中,缓存等级对应的缓存数量越多,与该缓存等级匹配的线程池的权重值越大;相反的,缓存等级对应的缓存数量越少,与该缓存等级匹配的线程池的权重值越小。通过缓存数量来确定线程池的权重值,从而决定每个线程池中包含的线程数量,可以使得每个线程池中的线程数量能够准确地满足对应缓存等级中各个缓存的处理操作,使资源得到合理使用,节省成本。
在其他实施例中,还可以综合采用权重模块420和扫描模块430中提供的线程池的权重值设定方法,从而设置更加合理的线程池的权重值。另外,线程池的权重值还可以进一步根据对应等级的缓存的类型、重要程度等多种因素进行确定。
淘汰模块440:利用每个线程池中的多个线程对缓存等级与该线程池匹配的缓存内的数据进行淘汰。
具体地,根据上述模块确定的缓存等级,淘汰模块440利用与各个缓存等级相匹配的线程池中的多个线程对具有对应缓存等级的缓存进行数据淘汰处理。其中,每个线程池可以仅处理一个缓存等级的缓存,例如,划分模块410中将缓存分为HIGH级别、LOW级别和IDLE级别一共三个级别,所以仅需三个线程池与之对应。具体的,线程池1对应HIGH级别,线程池2对应LOW级别,线程池3对应IDLE级别,在这种情况下,线程池1中的所有线程仅处理HIGH级别中的所有缓存,线程池2中所有线程仅处理LOW级别中的所有缓存,线程池3中所有线程仅处理IDLE级别中的所有缓存。当然,当缓存等级较多时,每个线程池也可以用于处理多个缓存等级的缓存。例如,当缓存等级包括六个级别时,也可以由三个线程池进行处理,每个线程池分别处理两个等级的缓存。
总之,通过缓存等级的划分以及线程池技术的应用,能够更加灵活地实现缓存的扫描及数据淘汰工作。另外,上述的扫描模块430以及淘汰模块440均可以反复多次运行,例如,扫描模块430可以每隔预设的第一时间间隔运行一次,淘汰模块440可以每隔预设的第二时间间隔运行一次。其中,第一时间间隔与第二时间间隔可以相等,也可以不等。另外,第一时间间隔和第二时间间隔既可以是固定值,也可以是动态变化的数值。例如,第一时间间隔可以根据扫描结果进行动态调整:当扫描结果中HIGH级别的缓存数量较多时,缩小第一时间间隔;当扫描结果中HIGH级别的缓存数量较少时,增大第一时间间隔。另外,在淘汰模块440的每次运行过程中,各个线程池既可以按照相同的执行周期对相应等级的缓存执行淘汰操作,也可以按照不同的执行周期对相应等级的缓存执行淘汰操作。例如,用于处理HIGH级别的缓存的线程池可以按照较短的执行周期进行数据淘汰操作,以防止HIGH级别的缓存的可用空间不足;用于处理IDLE级别的缓存的线程池可以按照较长的执行周期进行数据淘汰操作,以节省系统开销。总之,本领域技术人员可根据实际需要灵活采用各种方式确定上述的扫描模块430以及淘汰模块440的运行次数以及运行时机,本发明对此不做限定。由此可见,通过缓存等级的划分以及线程池技术的应用,为数据淘汰操作提供了更多的灵活性和可控性,能够满足各类场景的需求。
在本发明实施例中,淘汰模块440进行数据淘汰的具体方法可以由本领域技术人员灵活设置,本发明对此不做限定。例如,可以根据数据写入时间、数据写入次数、数据温度属性、数据类型等多种因素进行淘汰。在本实施例中,数据淘汰方法可以是:根据缓存内的各个数据的写入总次数以及预设的温度属性计算规则,计算缓存内的各个数据的温度属性值,并根据温度属性值确定缓存内的各个数据的淘汰顺序。
其中,预设的温度属性计算规则为本领域技术人员根据实际情况所设置的计算各个缓存数据的热门程度的规则。在这里,缓存数据的热门程度可以通过缓存数据被写入的总次数、和/或缓存数据的存储时段等因素进行确定。具体地,在计算各个缓存数据的温度属性值时,可以单独根据各个缓存数据的写入总次数计算各个缓存数据的温度属性值;也可以进一步结合其他因素计算各个缓存数据的温度属性值。本发明对温度属性值的具体计算规则不做限定,只要能够满足用户的实际需求即可。
在计算出各个缓存数据的温度属性值之后,按照上述计算的温度属性值从低到高的顺序,依次淘汰温度属性值最低的缓存数据,以此实现根据缓存数据热门程度来淘汰数据的效果,并且及时有效地释放缓存空间。
另外,本领域技术人员还可以对上述方案进行各种改动和变形。例如,在根据写入总次数确定温度属性时,除了直接根据写入总次数的数值进行确定外,还可以预先将写入总次数划分为多个数值区间,为各个数值区间分别设置对应的区间分值,并根据该区间分值确定温度属性值。例如,当写入总次数属于【0,10】这一数值区间时,区间分值为1;当写入总次数属于【10,50】这一数值区间时,区间分值为5;当写入总次数属于【50,100】这一数值区间时,区间分值为10。通过区间分值能够更加灵活地将写入总次数位于某一区间内的数据确定为热门数据。而且,为了使数据淘汰方式更为灵活,上述预设的温度属性计算规则还可以包括:预先将缓存对应的缓存时长进一步划分为多个缓存时段,为各个缓存时段分别设置对应的时段权重值;针对每个缓存数据,根据该缓存数据各次写入时对应的缓存时段的时段权重值确定该缓存数据的温度属性值。缓存时长可以为:由缓存中写入时间最早的数据所对应的第一数据写入时间和写入时间最晚的数据所对应的第二数据写入时间所界定的时间长度。而且,缓存时长也可以是预先设定的时间长度,例如,假设一个缓存专用于存储最近的三小时之内的缓存数据,一旦写入缓存的缓存数据的写入时间超过三小时则会自动删除,则该缓存的缓存时长为3小时。在将缓存时长划分为多个缓存时段时,可以将整个缓存时长划分为多个均等的缓存时段,也可以将整个缓存时长划分为多个不等的缓存时段。为了便于根据缓存时段计算缓存数据的温度属性,在进行上述划分之后,可选地,还可以分别针对每个缓存时段设置与该缓存时段对应的时段数据表,其中,各个时段数据表用于记录相应的缓存时段内写入的缓存数据。为了便于根据缓存时段确定缓存数据的淘汰顺序,在本实施例中,还需要为上述划分的各个缓存时段设置对应的时段权重值,其设置方式也是多样的。具体地,可以将各个时段的权重值设置为均等的,这样更侧重于从各个缓存数据出现的次数这一方面去计算缓存数据的温度属性值;或者,也可以按照缓存时段在时间上从前往后的顺序对应地设置递增的(或递减的)时段权重值,这样侧重于将缓存数据的出现次数与写入时间进行结合来计算各个缓存的数据的温度属性值。在这里,各个时段的权重值设置由本领域技术人员根据实际情况而定,本发明对此不作限制。总之,通过缓存时段以及时段权重值的设置方式,使用户能够根据实际需求优先淘汰非重要时段内的数据,使淘汰方案更为灵活。
另外,上述预设的等级划分规则除了可以按照存储空间进行划分外,还可以进一步根据缓存内存储的数据类型等其他因素进行划分,总之,本发明对缓存等级的划分方式以及线程池的权重设置方式不做限定。
在本发明实施例中,上述各个线程池之间均相互并行运行,由此可以使数据处理效率进一步提高。
关于上述各个模块的具体结构和工作原理可参照方法实施例中相应部分的描述,此处不再赘述。
由此可见,本发明实施例四提供的一种基于多个缓存的数据淘汰装置可以按照预设的等级划分规则划分多个缓存等级,分别为各个缓存等级创建匹配的线程池;利用各个线程池中的多个线程分别扫描各个缓存,根据扫描结果以及等级划分规则确定各个缓存的缓存等级;利用每个线程池中的多个线程对缓存等级与该线程池匹配的缓存内的数据进行淘汰。由此解决了现有技术中单线程处理效率低下的问题,实现了在不同权重的缓存集合上多线程并行同时进行数据淘汰操作,在保证一致性的同时大大提高了数据淘汰处理效率,同时,通过对线程池的改进,可以在并行的同时保证缓存集合的淘汰优先级。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的一种基于多个缓存的数据淘汰装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了:A1、一种基于多个缓存的数据淘汰方法,包括:
按照预设的等级划分规则划分多个缓存等级,分别为各个缓存等级创建匹配的线程池;其中,每个线程池中包含多个线程;
利用各个线程池中的多个线程分别扫描各个缓存,根据扫描结果以及所述等级划分规则确定各个缓存的缓存等级;
利用每个线程池中的多个线程对缓存等级与该线程池匹配的缓存内的数据进行淘汰。
A2、根据A1所述的方法,其中,进一步包括:为各个线程池分别设置对应的权重值,根据各个线程池的权重值设置各个线程池内包含的线程的数量;其中,线程池的权重值越大,线程池内包含的线程的数量越多。
A3、根据A2所述的方法,其中,所述为各个线程池分别设置对应的权重值,根据各个线程池的权重值设置各个线程池内包含的线程的数量的步骤具体包括:
定期获取各个线程池的扫描结果,根据所述扫描结果确定各个缓存等级对应的缓存数量;
根据所述各个缓存等级对应的缓存数量调整各个线程池的权重值,并根据各个线程池调整后的权重值调整各个线程池内包含的线程的数量;
其中,缓存等级对应的缓存数量越多,与该缓存等级匹配的线程池的权重值越大。
A4、根据A2或A3所述的方法,其中,所述为各个线程池分别设置对应的权重值的步骤进一步包括:
针对每个线程池,根据与该线程池匹配的缓存等级的高低设置该线程池对应的权重值;其中,与该线程池匹配的缓存等级越高,该线程池的权重值越大。
A5、根据A1-A4任一所述的方法,其中,所述预设的等级划分规则包括:按照缓存的剩余存储空间与总存储空间之间的比值划分缓存等级,其中,剩余存储空间与总存储空间之间的比值越大,缓存等级越高。
A6、根据A1-A5任一所述的方法,其中,所述利用每个线程池中的多个线程对缓存等级与该线程池匹配的缓存内的数据进行淘汰的步骤具体包括:
根据所述缓存内的各个数据的写入总次数以及预设的温度属性计算规则,计算所述缓存内的各个数据的温度属性值,并根据所述温度属性值确定所述缓存内的各个数据的淘汰顺序。
A7、根据A1-A6任一所述的方法,其中,各个线程池之间相互并行运行。
本发明还公开了:B8、一种基于多个缓存的数据淘汰装置,包括:
划分模块,用于按照预设的等级划分规则划分多个缓存等级,分别为各个缓存等级创建匹配的线程池;其中,每个线程池中包含多个线程;
扫描模块,用于利用各个线程池中的多个线程分别扫描各个缓存,根据扫描结果以及所述等级划分规则确定各个缓存的缓存等级;
淘汰模块,用于利用每个线程池中的多个线程对缓存等级与该线程池匹配的缓存内的数据进行淘汰。
B9、根据B8所述的装置,其中,进一步包括:权重模块,用于为各个线程池分别设置对应的权重值,根据各个线程池的权重值设置各个线程池内包含的线程的数量;其中,线程池的权重值越大,线程池内包含的线程的数量越多。
B10、根据B9所述的装置,其中,所述权重模块具体用于:
定期获取各个线程池的扫描结果,根据所述扫描结果确定各个缓存等级对应的缓存数量;
根据所述各个缓存等级对应的缓存数量调整各个线程池的权重值,并根据各个线程池调整后的权重值调整各个线程池内包含的线程的数量;
其中,缓存等级对应的缓存数量越多,与该缓存等级匹配的线程池的权重值越大。
B11、根据B9或B10所述的装置,其中,所述权重模块进一步用于:
针对每个线程池,根据与该线程池匹配的缓存等级的高低设置该线程池对应的权重值;其中,与该线程池匹配的缓存等级越高,该线程池的权重值越大。
B12、根据B8-B11任一所述的装置,其中,所述预设的等级划分规则包括:按照缓存的剩余存储空间与总存储空间之间的比值划分缓存等级,其中,剩余存储空间与总存储空间之间的比值越大,缓存等级越高。
B13、根据B8-B12任一所述的装置,其中,所述淘汰模块具体用于:
根据所述缓存内的各个数据的写入总次数以及预设的温度属性计算规则,计算所述缓存内的各个数据的温度属性值,并根据所述温度属性值确定所述缓存内的各个数据的淘汰顺序。
B14、根据B8-B13任一所述的装置,其中,各个线程池之间相互并行运行。