缓存方法及系统.pdf

上传人:1*** 文档编号:4335908 上传时间:2018-09-14 格式:PDF 页数:14 大小:511.47KB
返回 下载 相关 举报
摘要
申请专利号:

CN201110151049.3

申请日:

2011.06.07

公开号:

CN102821113A

公开日:

2012.12.12

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):H04L 29/08申请日:20110607|||公开

IPC分类号:

H04L29/08

主分类号:

H04L29/08

申请人:

阿里巴巴集团控股有限公司

发明人:

王宏江; 农子盛

地址:

英属开曼群岛大开曼资本大厦一座四层847号邮箱

优先权:

专利代理机构:

北京润泽恒知识产权代理有限公司 11319

代理人:

苏培华

PDF下载: PDF下载
内容摘要

本申请提供了一种缓存方法,包括:计算缓存数据的权重;根据所述缓存数据的权重对缓存数据进行排序;根据设定的热点缓存数据的阈值对排序后的缓存数据进行分类,将权重排在阈值之前的缓存数据存入热点区,排序在阈值之后的缓存数据存入非热点区。本申请还提供一种实现前述方法的缓存系统。本申请的缓存方法及系统,能够对缓存数据进行分类,并动态调整缓存中的数据,避免一次性将所有的数据都加载到内存上而造成的内存溢出、系统崩溃等情况。

权利要求书

1.一种缓存方法,其特征在于,包括以下步骤:步骤101,计算缓存数据的权重;步骤102,根据所述缓存数据的权重对缓存数据进行排序;步骤103,根据设定的热点缓存数据的阈值对排序后的缓存数据进行分类,将权重排在阈值之前的缓存数据存入热点区,排序在阈值之后的缓存数据存入非热点区。2.如权利要求1所述的方法,其特征在于,所述计算缓存数据的权重包括:根据缓存数据的访问数量来计算权重;或根据缓存数据的访问数量与缓存数据总量来计算权重。3.如权利要求1或2所述的方法,其特征在于,所述计算缓存数据的权重采用的公式为:权重=访问数量/缓存数据总量的平方根。4.如权利要求1所述的方法,其特征在于,所述方法还包括:在步骤103之后增加如下步骤:在预定时间后重新计算缓存数据的权重,并返回步骤102。5.如权利要求1所述的方法,其特征在于,所述方法还包括:在步骤103之后增加如下步骤:步骤301,在预定时间后重新计算缓存数据的权重;步骤302,比较重新计算后的热点区的最小权重值与非热点区的最大权重值,若热点区的最小权重值小于非热点区的最大权重值,则将热点区中具有最小权重值的缓存数据移到非热点区,并将非热点区中具有最大权重值的缓存数据移到热点区;步骤303,重复步骤302,直到热点区的最小权重值大于非热点区的最大权重值。6.如权利要求5所述的方法,其特征在于,所述方法还包括:对所述热点区的缓存数据采用小根堆排序;对所述非热点区的缓存数据采用大根堆排序。7.如权利要求1、4或5所述的方法,其特征在于,所述方法还包括:加载所述热点区的缓存数据到内存。8.如权利要求7所述的方法,其特征在于,加载所述热点区的缓存数据到内存,具体包括:当在加载时只将热点区的缓存数据从外部设备中加载到内存,当需要时再从存储缓存数据的外部设备中获取非热点区的缓存数据。9.如权利要求1所述的方法,其特征在于,所述方法还包括:在本次计算权重后到在下次计算权重之前存储本次计算的缓存数据的权重。10.一种缓存系统,其特征在于,包括:权重计算模块,用于计算缓存数据的权重;排序模块,用于根据缓存数据的权重对缓存数据进行排序;分类模块,根据设定的热点缓存数据的阈值对排序后的缓存数据进行分类,将权重排在阈值之前的缓存数据存入热点区,排序在阈值之后的缓存数据存入非热点区。11.如权利要求10所述的系统,其特征在于,所述系统还包括:计时模块,用于计算缓存数据权重调整时间,并触发权重计算模块对缓存数据权重的重新计算。12.如权利要求11所述的系统,其特征在于,所述系统还包括:比较模块,用于比较重新计算权重后的热点区的最小权重值与非热点区的最大权重值,若热点区的最小权重值小于非热点区的最大权重值,则将热点区中具有最小权重值的缓存数据移到非热点区,并将非热点区中具有最大权重值的缓存数据移到热点区。13.如权利要求11或12所述的系统,其特征在于,所述系统还包括:存储模块,用于对每次计算的缓存数据的权重进行存储。14.如权利要求10所述的系统,其特征在于,所述系统还包括:加载模块,用于加载所述热点区的缓存数据到内存,具体包括:当在加载时只将热点区的缓存数据从外部设备中加载到内存,当需要时再从存储缓存数据的外部设备中获取非热点区的缓存数据。

说明书

缓存方法及系统

技术领域

本申请涉及计算机网络数据缓存技术领域,特别是涉及一种缓存方法
及系统。

背景技术

在web应用中,为了获得较高的响应速度,web服务端通常需要将
缓存数据,特别是热点信息的缓存数据,存入到缓存服务器的节点中,
然后使用特定的算法将数据分配到不同的缓存区中。当用户提交访问请
求时,web服务端首先在缓存服务器节点中查找缓存数据,如果能查找到
缓存数据则直接反馈给用户,如果找不到则从磁盘上的文件中读取数据,
并将查询的数据写入缓存节点中,从而能快速的对后续请求给出反馈。

目前常见的缓存装置,如Memcached、OSCache,对于只有少量的缓
存数据时能够提供快速的反馈,如果缓存数据量较大时,若从这些缓存
装置中读取数据会占用较多的网络资源,造成网络拥塞,影响系统的响
应反馈速度。

发明内容

本申请所要解决的技术问题是提供一种缓存方法及系统,能够对缓存
数据进行分类,并动态调整缓存中的数据,避免一次性将所有的数据都加
载到内存上而造成的内存溢出、系统崩溃等情况。

为了解决上述问题,本申请公开了一种缓存方法,包括以下步骤:

步骤101,计算缓存数据的权重;

步骤102,根据所述缓存数据的权重对缓存数据进行排序;

步骤103,根据设定的热点缓存数据的阈值对排序后的缓存数据进行
分类,将权重排在阈值之前的缓存数据存入热点区,排序在阈值之后的
缓存数据存入非热点区。

进一步地,所述计算缓存数据的权重包括:

根据缓存数据的访问数量来计算权重;或

根据缓存数据的访问数量与缓存数据总量来计算权重。

进一步地,所述计算缓存数据的权重采用的公式为:权重=访问数量/
缓存数据总量的平方根。

进一步地,所述方法还包括:在步骤103之后增加如下步骤:

在预定时间后重新计算缓存数据的权重,并返回步骤102。

进一步地,所述方法还包括:在步骤103之后增加如下步骤:

步骤301,在预定时间后重新计算缓存数据的权重;

步骤302,比较重新计算后的热点区的最小权重值与非热点区的最大
权重值,若热点区的最小权重值小于非热点区的最大权重值,则将热点
区中具有最小权重值的缓存数据移到非热点区,并将非热点区中具有最
大权重值的缓存数据移到热点区;

步骤303,重复步骤302,直到热点区的最小权重值大于非热点区的
最大权重值。

进一步地,所述方法还包括:

对所述热点区的缓存数据采用小根堆排序;

对所述非热点区的缓存数据采用大根堆排序。

进一步地,所述方法还包括:

加载所述热点区的缓存数据到内存。

进一步地,加载所述热点区的缓存数据到内存,具体包括:当在加载
时只将热点区的缓存数据从外部设备中加载到内存,当需要时再从存储
缓存数据的外部设备中获取非热点区的缓存数据。

进一步地,所述方法还包括:

在本次计算权重后到在下次计算权重之前存储本次计算的缓存数据
的权重。

为了解决上述问题,本发明还公开了一种缓存系统,包括:

权重计算模块,用于计算缓存数据的权重;

排序模块,用于根据缓存数据的权重对缓存数据进行排序;

分类模块,根据设定的热点缓存数据的阈值对排序后的缓存数据进行
分类,将权重排在阈值之前的缓存数据存入热点区,排序在阈值之后的
缓存数据存入非热点区。

进一步地,所述系统还包括:

计时模块,用于计算缓存数据权重调整时间,并触发权重计算模块对
缓存数据权重的重新计算。

进一步地,所述系统还包括:

比较模块,用于比较重新计算权重后的热点区的最小权重值与非热点
区的最大权重值,若热点区的最小权重值小于非热点区的最大权重值,
则将热点区中具有最小权重值的缓存数据移到非热点区,并将非热点区
中具有最大权重值的缓存数据移到热点区。

进一步地,所述系统还包括:

存储模块,用于对每次计算的缓存数据的权重进行存储。

进一步地,所述系统还包括:

加载模块,用于加载所述热点区的缓存数据到内存,具体包括:当在
加载时只将热点区的缓存数据从外部设备中加载到内存,当需要时再从
存储缓存数据的外部设备中获取非热点区的缓存数据。

与现有技术相比,本申请包括以下优点:

本申请的缓存方法及系统通过根据缓存数据的访问频繁程度来对缓
存数据进行分类,并在存储所有缓存数据的外部设备,如应用服务器中
划分热点区和非热点区,当在加载时可以只将热点区的缓存数据从外部
设备中加载到内存,对于非热点区的缓存数据,当需要时再从存储缓存
数据的外部设备中获取。这种按照数据热点分布情况加载缓存数据的方
式可以避免将所有的缓存数据都加载到内存上而造成的内存溢出、系统
崩溃的情况。同时,热点区的缓存数据是访问相对频繁的热点缓存数据,
因此可以保证系统的响应速度。

其次,本申请在预定时间内对缓存数据的权重重新计算并调整热点
区和非热点区的数据,通过实时更新的方式来保证热点区的缓存数据的
时效性。

另外,在对热点区和非热点区的缓存数据排序时采用不同的排序方
式,热点区的缓存数据采用小根堆排序,按照权重从小到大的顺序排列,
非热点区的缓存数据采用大根堆排序,按照权重从大到小的顺序排列,
在进行缓存数据移动时,可以仅通过比较热点区的最小权重值与非热点
区的最大权重值就能得出是否需要移动缓存数据,无需重新去查找数据,
能节省调整时间并简化调整步骤。

进一步地,在每次调整后会记录缓存数据的权重,避免因为系统突
然崩溃或者出现其他故障等情况,在每次计算出缓存数据的权重后,对
权重进行存储记录,当重新启动后,能够直接加载存储记录,而无需重
新再次计算。

当然,实施本申请的任一产品不一定需要同时达到以上所述的所有优
点。

附图说明

图1是本申请的缓存方法实施例一的流程图;

图2是本申请的缓存方法实施例二的流程图;

图3是本申请的缓存方法实施例三的流程图;

图4是本申请的缓存系统实施例一的结构示意图;

图5是本申请的缓存系统实施例二的结构示意图;

图6是本申请的缓存系统实施例三的结构示意图。

具体实施方式

为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图
和具体实施方式对本申请作进一步详细的说明。

本申请提供一种缓存方法和系统,可以应用于用户需要访问网站所
对应的服务器中。具体的,本申请的缓存方法和缓存系统可以通过计算
机程序实现,并存储于服务器中,通过处理器的运行来执行。

参照图1,示出本申请的一种缓存方法实施例一,包括以下步骤:

步骤101,计算缓存数据的权重。

对于缓存数据的权重可以根据预先设定的公式来计算,在计算权重
时一般会考虑缓存数据的访问数量。例如,权重可以直接根据某一缓存
数据的访问数量来计算。优先的,因为在不同的情况下,可能会出现访
问数量与缓存数据总量比例并不相同的情况,例如,在计算访问次数时,
其中一个缓存数据的访问次数为1,而另一缓存数据的访问次数为20,
若仅根据访问数量来计算权重时,访问次数为20次的缓存数据的权重会
大于访问次数为1的缓存数据。而如果考虑缓存数据总量,若访问次数
为1的缓存数据所对应的总量为20条,而访问次数为20的缓存数据所
对应的总量已经增加到10万条,那么可以看出,访问次数为1的访问几
率实际上大于访问次数20的访问几率。因此,若仅以访问次数来计算权
重,特别是在缓存数据总量变化较大时,会影响到权重的合理性。为了
使计算的权重更为合理,除了访问数量,还可以考虑缓存数据的总量大
小,从而使热点数据的划分结果更为准确。例如,以访问数量与缓存数
据总量的比值来计算。进一步地,因为访问数量是用于判断缓存数据是
否属于热点数据的重要因素,为了降低缓存数据总量对缓存数据权重的
影响,权重还可以通过如下公式来计算:权重=访问数量/总量大小的平方
根,即增加访问数量对权重的影响。

步骤102,根据所述缓存数据的权重对缓存数据进行排序。

排序可以采用如堆排序的方式,按照权重值从大到小的方式。

步骤103,根据设定的热点缓存数据的阈值对排序后的缓存数据进行
分类,将权重排在阈值之前的缓存数据存入热点区,排序在阈值之后的
缓存数据存入非热点区。

热点缓存数据的阈值可以根据实际情况来确定,例如用于缓存的内
存大小等等,内存越大,设定的阈值也可以越大。例如,设定的热点缓
存数据的阈值为2000条,那么就可以将权重排在前2000条缓存数据存
入热点区,而2000以后的缓存数据则存入非热点区。

本申请的缓存方法通过在存储所有缓存数据的外部设备,如应用服
务器中划分热点区和非热点区,当在加载时可以只将热点区的缓存数据
加载到内存,对于非热点区的缓存数据,当需要时再从存储缓存数据的
数据库中获取。这种按照数据热点分布情况加载缓存数据的方式可以避
免将所有的缓存数据都加载到内存上而造成的内存溢出、系统崩溃的情
况。同时,加载的缓存数据是访问相对频繁的热点缓存数据,因此可以
保证系统的响应速度。

参照图2,示出本申请的缓存方法实施例二,进一步地,在实施例一
的步骤103之后还包括如下步骤:

步骤201,在预定时间后重新计算缓存数据的权重,并返回步骤102。

因为访问数量会随着时间的变化而变化,所以热点缓存数据也会因
为时间的变化而变化,为了使热点区所存储的缓存数据为当前时间的热
点缓存数据,可以预先设定缓存数据的调整时间,在到达调整时间时则
重新计算缓存数据的权重。例如,可以将调整时间设置为一小时,二小
时或者半天等等。具体的,可以通过设置计时器来实现,当计时器显示
当前时间距离上次权重计算时间已经到达调整时间后,则触发重新计算
缓存数据的权重。并根据重新计算的权重再次对缓存数据进行排序以重
新区分热点区和非热点区的缓存数据。

参照图3,示出本申请的缓存方法实施例三,进一步地,在实施例一
的步骤103之后还包括如下步骤:

步骤301,在预定时间后重新计算缓存数据的权重。

步骤302,比较重新计算权重后的热点区的最小权重值与非热点区的
最大权重值,若热点区的最小权重值小于非热点区的最大权重值,则将
热点区中具有最小权重值的缓存数据移到非热点区,并将非热点区中具
有最大权重值的缓存数据移到热点区。

步骤303,重复步骤302,直到热点区的最小权重值大于非热点区的
最大权重值。

进一步地,为了减少调整时间,热点区和非热点区的缓存数据都可
以采用堆排序的方式来进行排序。其中,热点区的缓存数据采用小根堆
排序,按照权重从小到大的顺序排列,即权重最小的排队首,权重最大
的排队尾。非热点区的缓存数据采用大根堆排序,按照权重从大到小的
顺序排列,即权重最大的排队首,权重最小的排队尾。在比较热点区和
非热点区的权重值大小时,则可以直接将热点区队首的权重值与非热点
区的队尾的权重值比较即可,无需重新去查找数据,能节省调整时间并
简化调整步骤。

在重新区分热点缓存数据和非热点缓存数据后,可以按照热点区和
非热点区原定的排序方式对各自的数据重新排序,以备后续使用。

进一步地,本申请的缓存方法实施例还包括:存储热点区和非热点
区的缓存数据的权重。

为了避免因为系统突然崩溃或者出现其他故障等情况,在每次计算
出缓存数据的权重后,对热点区和非热点区的缓存数据的权重进行存储
记录,当重新启动后,能够直接加载存储记录,而无需重新再次计算。
其中,缓存数据的权重可以在每次计算后到在下次计算之前这段时间内
存储。当然,为了保证存储的及时性,可以在权重值被计算出的同时就
存储。可以理解,对于缓存数据的权重的存储也可以区分热点区和非热
点区,即将热点区的权重作为一组数据存储,将非热点区的权重作为另
一组数据存储。

下面结合具体的实例对本申请的缓存方法进行详细的说明,假设本
申请采用Hotspot Cache(热点区缓存),缓存数据为类目数据。

首先,对本实例中的类目和缓存数据结构进行说明。在电子商务网
站中商品信息的类目体系中,类目是一种树形的结构,每一个类目形成
一颗类目树,类目树由属性和属性值组成。每个类目可以由具有描述该
类目特征的相关属性来确定,而这些属性称为该类目的关键属性。由这
些属性和其关联的属性值形成的路径,就是关键路径(spuPath)。其中,
一个类目下面可能会对应多个关键路径,每一个关键路径对应一个标准
化产品单元标号(spuId,standard product unit Identity),通过标准化产品
单元标号可以获取到相关信息。在缓存数据载入或者查询时,通常是通
过输入类目标号(categoryId),找到对应的关键路径,然后通过关键路径
来获取标准化产品单元标号,从而最终获取到相关信息。具体的,在进
行存储时,每个类目作为独立的文件缓存在应用服务器中。其中,每个
类目的缓存数据是以key-value的形式存储在内存中,在进行查询时,通
过获取key的值,便可以找到对应的value值。因此,本实例的每个类目
的缓存数据可以通过两个key-value的形式来实现存储,首先,以类目标
号为key,关键路径的封装(spuIdstore)为value,然后再以关键路径为
key,以标准化产品单元标号为value存储在缓存中。当需要对缓存数据
进行查询时,在输入类目标号后,便可以获取到关键路径的封装,从而
获取到关键路径,最终获取到标准化产品单元标号。

在对类目进行缓存时,每个类目作为一个独立的文件存在服务器上,
通过类目树加载服务(CatTreeLoadServic)将磁盘上所有类目文件加载到
应用服务器的缓存中。同时将上一次的热点记录文件加载入Hotspot 
Cache中,保证了热点记录的连续。

其中,根据权重对缓存队列进行分类,权重队列weightQueue有两种,
分别为:热点区的缓存队列(cacheWeightQueue)和非热点区的待缓存队
列(uncacheWeightQueue)。WeightQueue是带权重的基于JDK(Java 
Development Kit)中PriorityQueue的封装和实现。

对缓存数据的权重队列的调整根据访问数量和数据总量来确定。访
问数量指某一类目被访问的次数,数据总量指类目树的总量。权重的计
算公式为:权重=访问数量/数据总量的平方根,即:W=accessCount/
Math.pow(capacity,0.5)。

设置调整缓存权重队列的期限值AdjustPeriod,当访问时间为所设置
的调整期限值的整数倍时,将触发对cacheWeightQueue和
uncacheWeightQueue的数据权重调整。

在每次调整后需要记录缓存中数据的权重值,也即热点快照。
DumpPeriod,是dump缓存数据的周期值,DumpTask则是将当前时间缓
存权重队列数据的热点快照记录下来的特殊任务。Hotspot Cache预先设
置默认的DumpPeriod,当符合访问量是dump周期的整数倍时,将dump
当前时刻cacheWeightQueue和uncacheWeightQueue中的权重值的热点快
照dump成文件,并保存于磁盘中,以备下次数据初始化时使用。

缓存中分成热点区和非热点区两个区块。热点区由cacheWeightQueue
构成,非热点区由不活跃的缓存数据在unCacheWeightQueue组成。根据
队列中的权重大小,决定哪些数据在什么时候进入热点区,哪些数据会
被移出热点区进入非热点区。其中,采用实现缓存权重更新策略的任务
MemeryAjustTask,对cacheWeightQueue和uncacheWeightQueue中的数据
进行权重大小的排序。对于cacheWeightQueue中的数据,按由小到大排
序,权重小的排队首,权重大的排队尾。而uncacheWeightQueue的数据,
则相反,按由大到小排序,权重大的排队首,权重小的排队尾。根据缓
存调整策略,当uncacheWeightQueue的队首元素权重值大于
cacheWeightQueue的队首元素权重值,则将uncacheWeightQueue的队首
元素出队,同时将该元素放入cacheWeightQueue的队尾,同时
cacheWeightQueue的队首元素出队,放入uncacheWeightQueue的队尾。

为了提高WeightQueue的排序效率,在WeightQueue中为提升队列中
数据量很大的时候排序效率,使用Binary Heap排序,cacheWeightQueue
使用小根堆排序,uncacheWeightQueue使用大根堆排序。

参照图4,示出本申请的一种缓存系统实施例一,此处的系统中的各
个模块是指基于计算机语言编写的计算机程序,存储于服务器中,并通
过处理器运行。缓存系统包括权重计算模块10、排序模块20和分类模块
30。

权重计算模块10,用于计算缓存数据的权重。其中,权重的计算可
以根据预先设定的公式来实现,例如通过访问数量或者访问数量与数据
大小的关系等等。

排序模块20,用于根据缓存数据的权重对缓存数据进行排序。具体
的,可以按照权重值从小到大或者从大到小的方式排列,例如,采用Binary 
Heap排序。

分类模块30,根据设定的热点缓存数据的阈值对排序后的缓存数据
进行分类,将权重排在阈值之前的缓存数据存入热点区,排序在阈值之
后的缓存数据存入非热点区。可以预先在分类模块30中设定阈值,根据
阈值来对缓存数据进行分类,并存入对应的区域。

加载模块70,用于加载所述热点区的缓存数据到内存,具体包括:当
在加载时只将热点区的缓存数据从外部设备中加载到内存,当需要时再
从存储缓存数据的外部设备中获取非热点区的缓存数据。

参照图5,示出本申请的一种缓存系统实施例二,进一步地,还包括
计时模块40,用于计算缓存数据权重调整时间,并触发权重计算模块对
缓存数据的权重重新进行计算。在计时模块中预先设定调整时间,当到
达调整时间后触发权重计算模块10重新计算缓存数据的权重,并再次进
行排序后分类。

参照图6,进一步地,本申请的缓存系统还包括比较模块50和存储
模块60。

比较模块50,用于比较重新计算权重后的热点区的最小权重值与非
热点区的最大权重值,若热点区的最小权重值小于非热点区的最大权重
值,则将热点区中具有最小权重值的缓存数据移到非热点区,并将非热
点区中具有最大权重值的缓存数据移到热点区,从而对热点区和非热点
区的缓存数据进行调整。如此循环,直到热点区的最小权重大于非热点
区的最大权重值,则停止比较。

存储模块60,用于对热点区和非热点区的缓存数据的权重进行存储,
以备后续使用。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点
说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分
互相参见即可。对于系统实施例而言,由于其与方法实施例基本相似,
所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上对本申请所提供的缓存方法及系统进行了详细介绍,本文中应
用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说
明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的
一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会
有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

缓存方法及系统.pdf_第1页
第1页 / 共14页
缓存方法及系统.pdf_第2页
第2页 / 共14页
缓存方法及系统.pdf_第3页
第3页 / 共14页
点击查看更多>>
资源描述

《缓存方法及系统.pdf》由会员分享,可在线阅读,更多相关《缓存方法及系统.pdf(14页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 102821113 A (43)申请公布日 2012.12.12 C N 1 0 2 8 2 1 1 1 3 A *CN102821113A* (21)申请号 201110151049.3 (22)申请日 2011.06.07 H04L 29/08(2006.01) (71)申请人阿里巴巴集团控股有限公司 地址英属开曼群岛大开曼资本大厦一座四 层847号邮箱 (72)发明人王宏江 农子盛 (74)专利代理机构北京润泽恒知识产权代理有 限公司 11319 代理人苏培华 (54) 发明名称 缓存方法及系统 (57) 摘要 本申请提供了一种缓存方法,包括:计算缓存 数据的权。

2、重;根据所述缓存数据的权重对缓存数 据进行排序;根据设定的热点缓存数据的阈值对 排序后的缓存数据进行分类,将权重排在阈值之 前的缓存数据存入热点区,排序在阈值之后的缓 存数据存入非热点区。本申请还提供一种实现前 述方法的缓存系统。本申请的缓存方法及系统,能 够对缓存数据进行分类,并动态调整缓存中的数 据,避免一次性将所有的数据都加载到内存上而 造成的内存溢出、系统崩溃等情况。 (51)Int.Cl. 权利要求书2页 说明书7页 附图4页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书 2 页 说明书 7 页 附图 4 页 1/2页 2 1.一种缓存方法,其特征在于,包括。

3、以下步骤: 步骤101,计算缓存数据的权重; 步骤102,根据所述缓存数据的权重对缓存数据进行排序; 步骤103,根据设定的热点缓存数据的阈值对排序后的缓存数据进行分类,将权重排在 阈值之前的缓存数据存入热点区,排序在阈值之后的缓存数据存入非热点区。 2.如权利要求1所述的方法,其特征在于,所述计算缓存数据的权重包括: 根据缓存数据的访问数量来计算权重;或 根据缓存数据的访问数量与缓存数据总量来计算权重。 3.如权利要求1或2所述的方法,其特征在于,所述计算缓存数据的权重采用的公式 为:权重访问数量/缓存数据总量的平方根。 4.如权利要求1所述的方法,其特征在于,所述方法还包括:在步骤103之。

4、后增加如下 步骤: 在预定时间后重新计算缓存数据的权重,并返回步骤102。 5.如权利要求1所述的方法,其特征在于,所述方法还包括:在步骤103之后增加如下 步骤: 步骤301,在预定时间后重新计算缓存数据的权重; 步骤302,比较重新计算后的热点区的最小权重值与非热点区的最大权重值,若热点区 的最小权重值小于非热点区的最大权重值,则将热点区中具有最小权重值的缓存数据移到 非热点区,并将非热点区中具有最大权重值的缓存数据移到热点区; 步骤303,重复步骤302,直到热点区的最小权重值大于非热点区的最大权重值。 6.如权利要求5所述的方法,其特征在于,所述方法还包括: 对所述热点区的缓存数据采用。

5、小根堆排序; 对所述非热点区的缓存数据采用大根堆排序。 7.如权利要求1、4或5所述的方法,其特征在于,所述方法还包括: 加载所述热点区的缓存数据到内存。 8.如权利要求7所述的方法,其特征在于,加载所述热点区的缓存数据到内存,具体包 括:当在加载时只将热点区的缓存数据从外部设备中加载到内存,当需要时再从存储缓存 数据的外部设备中获取非热点区的缓存数据。 9.如权利要求1所述的方法,其特征在于,所述方法还包括: 在本次计算权重后到在下次计算权重之前存储本次计算的缓存数据的权重。 10.一种缓存系统,其特征在于,包括: 权重计算模块,用于计算缓存数据的权重; 排序模块,用于根据缓存数据的权重对缓。

6、存数据进行排序; 分类模块,根据设定的热点缓存数据的阈值对排序后的缓存数据进行分类,将权重排 在阈值之前的缓存数据存入热点区,排序在阈值之后的缓存数据存入非热点区。 11.如权利要求10所述的系统,其特征在于,所述系统还包括: 计时模块,用于计算缓存数据权重调整时间,并触发权重计算模块对缓存数据权重的 重新计算。 12.如权利要求11所述的系统,其特征在于,所述系统还包括: 权 利 要 求 书CN 102821113 A 2/2页 3 比较模块,用于比较重新计算权重后的热点区的最小权重值与非热点区的最大权重 值,若热点区的最小权重值小于非热点区的最大权重值,则将热点区中具有最小权重值的 缓存数。

7、据移到非热点区,并将非热点区中具有最大权重值的缓存数据移到热点区。 13.如权利要求11或12所述的系统,其特征在于,所述系统还包括: 存储模块,用于对每次计算的缓存数据的权重进行存储。 14.如权利要求10所述的系统,其特征在于,所述系统还包括: 加载模块,用于加载所述热点区的缓存数据到内存,具体包括:当在加载时只将热点区 的缓存数据从外部设备中加载到内存,当需要时再从存储缓存数据的外部设备中获取非热 点区的缓存数据。 权 利 要 求 书CN 102821113 A 1/7页 4 缓存方法及系统 技术领域 0001 本申请涉及计算机网络数据缓存技术领域,特别是涉及一种缓存方法及系统。 背景技。

8、术 0002 在web应用中,为了获得较高的响应速度,web服务端通常需要将缓存数据,特别 是热点信息的缓存数据,存入到缓存服务器的节点中,然后使用特定的算法将数据分配到 不同的缓存区中。当用户提交访问请求时,web服务端首先在缓存服务器节点中查找缓存数 据,如果能查找到缓存数据则直接反馈给用户,如果找不到则从磁盘上的文件中读取数据, 并将查询的数据写入缓存节点中,从而能快速的对后续请求给出反馈。 0003 目前常见的缓存装置,如Memcached、OSCache,对于只有少量的缓存数据时能够提 供快速的反馈,如果缓存数据量较大时,若从这些缓存装置中读取数据会占用较多的网络 资源,造成网络拥塞。

9、,影响系统的响应反馈速度。 发明内容 0004 本申请所要解决的技术问题是提供一种缓存方法及系统,能够对缓存数据进行分 类,并动态调整缓存中的数据,避免一次性将所有的数据都加载到内存上而造成的内存溢 出、系统崩溃等情况。 0005 为了解决上述问题,本申请公开了一种缓存方法,包括以下步骤: 0006 步骤101,计算缓存数据的权重; 0007 步骤102,根据所述缓存数据的权重对缓存数据进行排序; 0008 步骤103,根据设定的热点缓存数据的阈值对排序后的缓存数据进行分类,将权重 排在阈值之前的缓存数据存入热点区,排序在阈值之后的缓存数据存入非热点区。 0009 进一步地,所述计算缓存数据的。

10、权重包括: 0010 根据缓存数据的访问数量来计算权重;或 0011 根据缓存数据的访问数量与缓存数据总量来计算权重。 0012 进一步地,所述计算缓存数据的权重采用的公式为:权重访问数量/缓存数据 总量的平方根。 0013 进一步地,所述方法还包括:在步骤103之后增加如下步骤: 0014 在预定时间后重新计算缓存数据的权重,并返回步骤102。 0015 进一步地,所述方法还包括:在步骤103之后增加如下步骤: 0016 步骤301,在预定时间后重新计算缓存数据的权重; 0017 步骤302,比较重新计算后的热点区的最小权重值与非热点区的最大权重值,若热 点区的最小权重值小于非热点区的最大权。

11、重值,则将热点区中具有最小权重值的缓存数据 移到非热点区,并将非热点区中具有最大权重值的缓存数据移到热点区; 0018 步骤303,重复步骤302,直到热点区的最小权重值大于非热点区的最大权重值。 0019 进一步地,所述方法还包括: 说 明 书CN 102821113 A 2/7页 5 0020 对所述热点区的缓存数据采用小根堆排序; 0021 对所述非热点区的缓存数据采用大根堆排序。 0022 进一步地,所述方法还包括: 0023 加载所述热点区的缓存数据到内存。 0024 进一步地,加载所述热点区的缓存数据到内存,具体包括:当在加载时只将热点区 的缓存数据从外部设备中加载到内存,当需要时。

12、再从存储缓存数据的外部设备中获取非热 点区的缓存数据。 0025 进一步地,所述方法还包括: 0026 在本次计算权重后到在下次计算权重之前存储本次计算的缓存数据的权重。 0027 为了解决上述问题,本发明还公开了一种缓存系统,包括: 0028 权重计算模块,用于计算缓存数据的权重; 0029 排序模块,用于根据缓存数据的权重对缓存数据进行排序; 0030 分类模块,根据设定的热点缓存数据的阈值对排序后的缓存数据进行分类,将权 重排在阈值之前的缓存数据存入热点区,排序在阈值之后的缓存数据存入非热点区。 0031 进一步地,所述系统还包括: 0032 计时模块,用于计算缓存数据权重调整时间,并触。

13、发权重计算模块对缓存数据权 重的重新计算。 0033 进一步地,所述系统还包括: 0034 比较模块,用于比较重新计算权重后的热点区的最小权重值与非热点区的最大权 重值,若热点区的最小权重值小于非热点区的最大权重值,则将热点区中具有最小权重值 的缓存数据移到非热点区,并将非热点区中具有最大权重值的缓存数据移到热点区。 0035 进一步地,所述系统还包括: 0036 存储模块,用于对每次计算的缓存数据的权重进行存储。 0037 进一步地,所述系统还包括: 0038 加载模块,用于加载所述热点区的缓存数据到内存,具体包括:当在加载时只将热 点区的缓存数据从外部设备中加载到内存,当需要时再从存储缓存。

14、数据的外部设备中获取 非热点区的缓存数据。 0039 与现有技术相比,本申请包括以下优点: 0040 本申请的缓存方法及系统通过根据缓存数据的访问频繁程度来对缓存数据进行 分类,并在存储所有缓存数据的外部设备,如应用服务器中划分热点区和非热点区,当在加 载时可以只将热点区的缓存数据从外部设备中加载到内存,对于非热点区的缓存数据,当 需要时再从存储缓存数据的外部设备中获取。这种按照数据热点分布情况加载缓存数据的 方式可以避免将所有的缓存数据都加载到内存上而造成的内存溢出、系统崩溃的情况。同 时,热点区的缓存数据是访问相对频繁的热点缓存数据,因此可以保证系统的响应速度。 0041 其次,本申请在预。

15、定时间内对缓存数据的权重重新计算并调整热点区和非热点区 的数据,通过实时更新的方式来保证热点区的缓存数据的时效性。 0042 另外,在对热点区和非热点区的缓存数据排序时采用不同的排序方式,热点区的 缓存数据采用小根堆排序,按照权重从小到大的顺序排列,非热点区的缓存数据采用大根 堆排序,按照权重从大到小的顺序排列,在进行缓存数据移动时,可以仅通过比较热点区的 说 明 书CN 102821113 A 3/7页 6 最小权重值与非热点区的最大权重值就能得出是否需要移动缓存数据,无需重新去查找数 据,能节省调整时间并简化调整步骤。 0043 进一步地,在每次调整后会记录缓存数据的权重,避免因为系统突然。

16、崩溃或者出 现其他故障等情况,在每次计算出缓存数据的权重后,对权重进行存储记录,当重新启动 后,能够直接加载存储记录,而无需重新再次计算。 0044 当然,实施本申请的任一产品不一定需要同时达到以上所述的所有优点。 附图说明 0045 图1是本申请的缓存方法实施例一的流程图; 0046 图2是本申请的缓存方法实施例二的流程图; 0047 图3是本申请的缓存方法实施例三的流程图; 0048 图4是本申请的缓存系统实施例一的结构示意图; 0049 图5是本申请的缓存系统实施例二的结构示意图; 0050 图6是本申请的缓存系统实施例三的结构示意图。 具体实施方式 0051 为使本申请的上述目的、特征。

17、和优点能够更加明显易懂,下面结合附图和具体实 施方式对本申请作进一步详细的说明。 0052 本申请提供一种缓存方法和系统,可以应用于用户需要访问网站所对应的服务器 中。具体的,本申请的缓存方法和缓存系统可以通过计算机程序实现,并存储于服务器中, 通过处理器的运行来执行。 0053 参照图1,示出本申请的一种缓存方法实施例一,包括以下步骤: 0054 步骤101,计算缓存数据的权重。 0055 对于缓存数据的权重可以根据预先设定的公式来计算,在计算权重时一般会考虑 缓存数据的访问数量。例如,权重可以直接根据某一缓存数据的访问数量来计算。优先的, 因为在不同的情况下,可能会出现访问数量与缓存数据总。

18、量比例并不相同的情况,例如,在 计算访问次数时,其中一个缓存数据的访问次数为1,而另一缓存数据的访问次数为20,若 仅根据访问数量来计算权重时,访问次数为20次的缓存数据的权重会大于访问次数为1的 缓存数据。而如果考虑缓存数据总量,若访问次数为1的缓存数据所对应的总量为20条, 而访问次数为20的缓存数据所对应的总量已经增加到10万条,那么可以看出,访问次数为 1的访问几率实际上大于访问次数20的访问几率。因此,若仅以访问次数来计算权重,特别 是在缓存数据总量变化较大时,会影响到权重的合理性。为了使计算的权重更为合理,除了 访问数量,还可以考虑缓存数据的总量大小,从而使热点数据的划分结果更为准。

19、确。例如, 以访问数量与缓存数据总量的比值来计算。进一步地,因为访问数量是用于判断缓存数据 是否属于热点数据的重要因素,为了降低缓存数据总量对缓存数据权重的影响,权重还可 以通过如下公式来计算:权重访问数量/总量大小的平方根,即增加访问数量对权重的 影响。 0056 步骤102,根据所述缓存数据的权重对缓存数据进行排序。 0057 排序可以采用如堆排序的方式,按照权重值从大到小的方式。 说 明 书CN 102821113 A 4/7页 7 0058 步骤103,根据设定的热点缓存数据的阈值对排序后的缓存数据进行分类,将权重 排在阈值之前的缓存数据存入热点区,排序在阈值之后的缓存数据存入非热点区。

20、。 0059 热点缓存数据的阈值可以根据实际情况来确定,例如用于缓存的内存大小等等, 内存越大,设定的阈值也可以越大。例如,设定的热点缓存数据的阈值为2000条,那么就可 以将权重排在前2000条缓存数据存入热点区,而2000以后的缓存数据则存入非热点区。 0060 本申请的缓存方法通过在存储所有缓存数据的外部设备,如应用服务器中划分热 点区和非热点区,当在加载时可以只将热点区的缓存数据加载到内存,对于非热点区的缓 存数据,当需要时再从存储缓存数据的数据库中获取。这种按照数据热点分布情况加载缓 存数据的方式可以避免将所有的缓存数据都加载到内存上而造成的内存溢出、系统崩溃的 情况。同时,加载的缓。

21、存数据是访问相对频繁的热点缓存数据,因此可以保证系统的响应速 度。 0061 参照图2,示出本申请的缓存方法实施例二,进一步地,在实施例一的步骤103之 后还包括如下步骤: 0062 步骤201,在预定时间后重新计算缓存数据的权重,并返回步骤102。 0063 因为访问数量会随着时间的变化而变化,所以热点缓存数据也会因为时间的变化 而变化,为了使热点区所存储的缓存数据为当前时间的热点缓存数据,可以预先设定缓存 数据的调整时间,在到达调整时间时则重新计算缓存数据的权重。例如,可以将调整时间设 置为一小时,二小时或者半天等等。具体的,可以通过设置计时器来实现,当计时器显示当 前时间距离上次权重计算。

22、时间已经到达调整时间后,则触发重新计算缓存数据的权重。并 根据重新计算的权重再次对缓存数据进行排序以重新区分热点区和非热点区的缓存数据。 0064 参照图3,示出本申请的缓存方法实施例三,进一步地,在实施例一的步骤103之 后还包括如下步骤: 0065 步骤301,在预定时间后重新计算缓存数据的权重。 0066 步骤302,比较重新计算权重后的热点区的最小权重值与非热点区的最大权重值, 若热点区的最小权重值小于非热点区的最大权重值,则将热点区中具有最小权重值的缓存 数据移到非热点区,并将非热点区中具有最大权重值的缓存数据移到热点区。 0067 步骤303,重复步骤302,直到热点区的最小权重值。

23、大于非热点区的最大权重值。 0068 进一步地,为了减少调整时间,热点区和非热点区的缓存数据都可以采用堆排序 的方式来进行排序。其中,热点区的缓存数据采用小根堆排序,按照权重从小到大的顺序排 列,即权重最小的排队首,权重最大的排队尾。非热点区的缓存数据采用大根堆排序,按照 权重从大到小的顺序排列,即权重最大的排队首,权重最小的排队尾。在比较热点区和非热 点区的权重值大小时,则可以直接将热点区队首的权重值与非热点区的队尾的权重值比较 即可,无需重新去查找数据,能节省调整时间并简化调整步骤。 0069 在重新区分热点缓存数据和非热点缓存数据后,可以按照热点区和非热点区原定 的排序方式对各自的数据重。

24、新排序,以备后续使用。 0070 进一步地,本申请的缓存方法实施例还包括:存储热点区和非热点区的缓存数据 的权重。 0071 为了避免因为系统突然崩溃或者出现其他故障等情况,在每次计算出缓存数据的 权重后,对热点区和非热点区的缓存数据的权重进行存储记录,当重新启动后,能够直接加 说 明 书CN 102821113 A 5/7页 8 载存储记录,而无需重新再次计算。其中,缓存数据的权重可以在每次计算后到在下次计算 之前这段时间内存储。当然,为了保证存储的及时性,可以在权重值被计算出的同时就存 储。可以理解,对于缓存数据的权重的存储也可以区分热点区和非热点区,即将热点区的权 重作为一组数据存储,将。

25、非热点区的权重作为另一组数据存储。 0072 下面结合具体的实例对本申请的缓存方法进行详细的说明,假设本申请采用 Hotspot Cache(热点区缓存),缓存数据为类目数据。 0073 首先,对本实例中的类目和缓存数据结构进行说明。在电子商务网站中商品信息 的类目体系中,类目是一种树形的结构,每一个类目形成一颗类目树,类目树由属性和属性 值组成。每个类目可以由具有描述该类目特征的相关属性来确定,而这些属性称为该类目 的关键属性。由这些属性和其关联的属性值形成的路径,就是关键路径(spuPath)。其中, 一个类目下面可能会对应多个关键路径,每一个关键路径对应一个标准化产品单元标号 (spuI。

26、d,standard product unit Identity),通过标准化产品单元标号可以获取到相关信 息。在缓存数据载入或者查询时,通常是通过输入类目标号(categoryId),找到对应的关键 路径,然后通过关键路径来获取标准化产品单元标号,从而最终获取到相关信息。具体的, 在进行存储时,每个类目作为独立的文件缓存在应用服务器中。其中,每个类目的缓存数据 是以key-value的形式存储在内存中,在进行查询时,通过获取key的值,便可以找到对应 的value值。因此,本实例的每个类目的缓存数据可以通过两个key-value的形式来实现 存储,首先,以类目标号为key,关键路径的封装(s。

27、puIdstore)为value,然后再以关键路径 为key,以标准化产品单元标号为value存储在缓存中。当需要对缓存数据进行查询时,在 输入类目标号后,便可以获取到关键路径的封装,从而获取到关键路径,最终获取到标准化 产品单元标号。 0074 在对类目进行缓存时,每个类目作为一个独立的文件存在服务器上,通过类目树 加载服务(CatTreeLoadServic)将磁盘上所有类目文件加载到应用服务器的缓存中。同时 将上一次的热点记录文件加载入Hotspot Cache中,保证了热点记录的连续。 0075 其中,根据权重对缓存队列进行分类,权重队列weightQueue有两种,分别为:热 点区的。

28、缓存队列(cacheWeightQueue)和非热点区的待缓存队列(uncacheWeightQueue)。 WeightQueue是带权重的基于JDK(Java Development Kit)中PriorityQueue的封装和实 现。 0076 对缓存数据的权重队列的调整根据访问数量和数据总量来确定。访问数量指某一 类目被访问的次数,数据总量指类目树的总量。权重的计算公式为:权重访问数量/数据 总量的平方根,即:WaccessCount/Math.pow(capacity,0.5)。 0077 设置调整缓存权重队列的期限值AdjustPeriod,当访问时间为所设置的调整期限 值的整数倍。

29、时,将触发对cacheWeightQueue和uncacheWeightQueue的数据权重调整。 0078 在每次调整后需要记录缓存中数据的权重值,也即热点快照。DumpPeriod,是dump 缓存数据的周期值,DumpTask则是将当前时间缓存权重队列数据的热点快照记录下来的特 殊任务。Hotspot Cache预先设置默认的DumpPeriod,当符合访问量是dump周期的整数倍 时,将dump当前时刻cacheWeightQueue和uncacheWeightQueue中的权重值的热点快照 dump成文件,并保存于磁盘中,以备下次数据初始化时使用。 0079 缓存中分成热点区和非热点。

30、区两个区块。热点区由cacheWeightQueue构成,非热 说 明 书CN 102821113 A 6/7页 9 点区由不活跃的缓存数据在unCacheWeightQueue组成。根据队列中的权重大小,决定哪些 数据在什么时候进入热点区,哪些数据会被移出热点区进入非热点区。其中,采用实现缓存 权重更新策略的任务MemeryAjustTask,对cacheWeightQueue和uncacheWeightQueue中 的数据进行权重大小的排序。对于cacheWeightQueue中的数据,按由小到大排序,权重小 的排队首,权重大的排队尾。而uncacheWeightQueue的数据,则相反,。

31、按由大到小排序,权 重大的排队首,权重小的排队尾。根据缓存调整策略,当uncacheWeightQueue的队首元素 权重值大于cacheWeightQueue的队首元素权重值,则将uncacheWeightQueue的队首元素 出队,同时将该元素放入cacheWeightQueue的队尾,同时cacheWeightQueue的队首元素出 队,放入uncacheWeightQueue的队尾。 0080 为了提高WeightQueue的排序效率,在WeightQueue中为提升队列中数据量 很大的时候排序效率,使用Binary Heap排序,cacheWeightQueue使用小根堆排序, un。

32、cacheWeightQueue使用大根堆排序。 0081 参照图4,示出本申请的一种缓存系统实施例一,此处的系统中的各个模块是指基 于计算机语言编写的计算机程序,存储于服务器中,并通过处理器运行。缓存系统包括权重 计算模块10、排序模块20和分类模块30。 0082 权重计算模块10,用于计算缓存数据的权重。其中,权重的计算可以根据预先设定 的公式来实现,例如通过访问数量或者访问数量与数据大小的关系等等。 0083 排序模块20,用于根据缓存数据的权重对缓存数据进行排序。具体的,可以按照权 重值从小到大或者从大到小的方式排列,例如,采用Binary Heap排序。 0084 分类模块30,根。

33、据设定的热点缓存数据的阈值对排序后的缓存数据进行分类,将 权重排在阈值之前的缓存数据存入热点区,排序在阈值之后的缓存数据存入非热点区。可 以预先在分类模块30中设定阈值,根据阈值来对缓存数据进行分类,并存入对应的区域。 0085 加载模块70,用于加载所述热点区的缓存数据到内存,具体包括:当在加载时只 将热点区的缓存数据从外部设备中加载到内存,当需要时再从存储缓存数据的外部设备中 获取非热点区的缓存数据。 0086 参照图5,示出本申请的一种缓存系统实施例二,进一步地,还包括计时模块40, 用于计算缓存数据权重调整时间,并触发权重计算模块对缓存数据的权重重新进行计算。 在计时模块中预先设定调整。

34、时间,当到达调整时间后触发权重计算模块10重新计算缓存 数据的权重,并再次进行排序后分类。 0087 参照图6,进一步地,本申请的缓存系统还包括比较模块50和存储模块60。 0088 比较模块50,用于比较重新计算权重后的热点区的最小权重值与非热点区的最大 权重值,若热点区的最小权重值小于非热点区的最大权重值,则将热点区中具有最小权重 值的缓存数据移到非热点区,并将非热点区中具有最大权重值的缓存数据移到热点区,从 而对热点区和非热点区的缓存数据进行调整。如此循环,直到热点区的最小权重大于非热 点区的最大权重值,则停止比较。 0089 存储模块60,用于对热点区和非热点区的缓存数据的权重进行存储。

35、,以备后续使 用。 0090 本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与 其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于系统实施例 说 明 书CN 102821113 A 7/7页 10 而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部 分说明即可。 0091 以上对本申请所提供的缓存方法及系统进行了详细介绍,本文中应用了具体个例 对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方 法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式 及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。 说 明 书CN 102821113 A 10 1/4页 11 图1 图2 说 明 书 附 图CN 102821113 A 11 2/4页 12 图3 说 明 书 附 图CN 102821113 A 12 3/4页 13 图4 图5 说 明 书 附 图CN 102821113 A 13 4/4页 14 图6 说 明 书 附 图CN 102821113 A 14 。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 电学 > 电通信技术


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1