缓存资源文件的URL存储方法及装置、缓存服务器
技术领域
本发明涉及缓存文件更新技术领域,特别是涉及一种缓存资源文件的统一资源定位符(Uniform Resource Locator,URL)存储方法及装置、缓存服务器。
背景技术
内容分发网络(Content Delivery Network,CDN),通过在网络各处放置节点服务器,在现有的互联网基础之上构建一层智能虚拟网络,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容。而这些“边缘”,也即是缓存服务器,用以缓存源站内容。
引入缓存服务器后,缓存资源文件需要回源验证,以更新过期文件。这就需要定时收集缓存服务器上缓存资源文件的URL,并在系统内存中保存已缓存资源文件的URL列表,以便在接收源站发布的更新通知时,对缓存的文件进行遍历,并清除相应URL的缓存内容。
现有技术中,URL列表在内存中的保存方式一般有三种,分别为使用标准库、哈希表和布隆过滤器来保存URL列表。但是,现有技术中的这三种URL列表存储方法存在着或者内存占用率大,或者动态扩展和收缩困难的缺点。
发明内容
本发明实施例解决的问题是如何在缓存服务器的内存中保存已缓存资源文件的URL,以节约内存,并且易于动态扩展和收缩。
为解决上述问题,本发明实施例提供了一种缓存资源文件的URL存储方法,所述方法包括:
收集缓存服务器内存中的已缓存资源文件的URL;
计算所述收集到的已缓存资源文件的URL的哈希值;
遍历预设的哈希红黑树,将所述收集到的已缓存资源文件的URL的哈希值与所述哈希红黑树节点中存储的已缓存资源文件的URL的哈希值进行比较;
当所述收集到的已缓存资源文件的URL的哈希值与所述哈希红黑树中存储的已缓存资源文件的URL的哈希值不相等时,将所述收集到的已缓存资源文件的URL的哈希值存储在所述哈希红黑树的节点中。
可选地,所述哈希值包括分别采用第一哈希函数、第二哈希函数和第三哈希函数计算得到的第一哈希值、第二哈希值和第三哈希值。
可选地,所述第一哈希函数、所述第二哈希函数和所述第三哈希函数为不同的哈希函数。
可选地,所述当所述收集到的已缓存资源文件的URL的哈希值与所述哈希红黑树中存储的已缓存资源文件的URL的哈希值不相等时,将所述收集到的已缓存资源文件的URL的哈希值保存在所述哈希红黑树的节点中,包括:当所述收集到的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值分别与所述哈希红黑树中存储的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值中至少有一组值不相等时,则将所述收集到的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值保存在所述哈希红黑树的节点中。
本发明实施例还提供了一种缓存资源文件的URL存储装置,所述装置包括:
收集单元,适于收集缓存服务器内存中的已缓存资源文件的URL;
计算单元,适于计算所述收集单元所收集到的已缓存资源文件的URL的哈希值;
比较单元,适于遍历预设的哈希红黑树,将所述计算单元所计算得到的已缓存资源文件的URL的哈希值与所述哈希红黑树中存储的已缓存资源文件的URL的哈希值进行比较;
存储单元,适于当所述收集到的已缓存资源文件的URL的哈希值与所述哈希红黑树中存储的已缓存资源文件的URL的哈希值不相等时,将所述收集到的已缓存资源文件的URL的哈希值存储在所述哈希红黑树的节点中。
可选地,所述计算单元包括第一计算子单元、第二计算子单元和第三计算子单元,所述比较单元包括第一比较子单元,第二比较子单元和第三比较子单元;其中,
所述第一计算子单元,适于采用第一哈希函数计算所述收集到的已缓存资源文件的URL的第一哈希值;
所述第二计算子单元,适于采用第二哈希函数计算所述收集到的已缓存资源文件的URL的第二哈希值;
所述第三计算子单元,适于采用第三哈希函数计算所述收集到的已缓存资源文件的URL的第三哈希值;
所述第一比较子单元,适于将所述第一计算子单元计算得到的所述收集到的已缓存资源文件的URL的所述第一哈希值与所述哈希红黑树中已存储的已缓存资源文件的URL的第一哈希值进行比较;
所述第二比较子单元,适于将所述第二计算子单元计算得到的所述收集到的已缓存资源文件的URL的所述第二哈希值与所述哈希红黑树中已存储的已缓存资源文件的URL的第二哈希值进行比较;
所述第三比较子单元,适于将所述第三计算子单元计算得到的所述收集到的已缓存资源文件的URL的所述第三哈希值与所述哈希红黑树中已存储的已缓存资源文件的URL的第三哈希值进行比较。
可选地,所述第一哈希函数、所述第二哈希函数和所述第三哈希函数为不同的哈希函数。
可选地,所述存储单元包括存储子单元,所述存储子单元适于当所述第一比较子单元、第二比较子单元和第三比较子单元分别将所述收集到的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值分别与所述哈希红黑树中已存储的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值进行比较,且比较结果中至少有一组值不相等时,将所述所收集到的已缓存资源文件的URL的所述第一哈希值、所述第二哈希值和所述第三哈希值存储于所述哈希红黑树的节点中。
本发明实施例还提供了一种缓存服务器,包括上述的缓存资源文件的URL存储装置。
本发明实施例还提供了一种缓存服务器,所述服务器包括上述的缓存资源文件的URL存储装置。
与现有技术相比,本发明的技术方案具有以下的优点:
上述的技术方案,由于在红黑树中的节点中仅存储已缓存资源文件的URL的哈希值,而非URL本身,因此可以减少已缓存资源文件的URL在内存中的占用率。并且,由于红黑树是一棵节点为黑色或者红色的自平衡二叉查找树,其可以实现数据的查找、插入和删除操作,并可将上述操作的时间控制在O(log n)(n为所述红黑树元素的数目)的时间内,方便高效。因此,采用红黑树的数据结构存储已缓存资源文件的URL的哈希值,可方便高效地实现数据的动态扩展和收缩。
进一步地,由于采用三个哈希函数分别计算URL的哈希值,并将三个哈希值同时保存在哈希红黑树中相应的同一节点中,可以有效避免哈希冲突,便于数据的存储。
附图说明
图1是本发明实施例中的一种URL存储方法的流程图;
图2是本发明实施例中的另一种URL存储方法的流程图;
图3是本发明实施例中的一种URL存储装置的结构示意图;
图4是本发明实施例中的另一种URL存储装置的结构示意图。
具体实施方式
现有技术中,已缓存资源文件的URL在缓存服务器中的保存方式有通常有三种:
一种是采用标准库std::set<std::string>来保存已缓存资源文件的URL。这种保存方式,将已缓存资源文件的URL完整保存在内存中,并能够保证URL的唯一性。但是,当内存中的已缓存资源文件数量较多时,使用这种方法保存URL将会占用较大的内存资源。
另一种是采用哈希表存储已缓存资源文件的URL。哈希表是根据关键字(Keyvalue)而直接访问在内存存储位置的数据结构。它把键值通过哈希函数(又称散列函数)进行计算后,映射到哈希表(又称散列表)中的特定位置,以访问所述位置处所存储的数据。但是,使用哈希表存储URL,需要在存储开始时就预设固定大小的内存,在存储的数据超过所预设的内存时,就需要不断的重构哈希表,这将不利于数据的动态扩展和收缩。
还有一种是使用布隆过滤器来存储已缓存资源文件的URL。布隆过滤器是一种基于二进制向量和一系列随机函数的数据结构。它通过散列函数将一个元素映射成位阵列(Bit array)中的点。这样,通过查看这个点是不是1,便可以知道它是否存在于集合中。但是,随着集合中的元素不断增加,布隆过滤器的误算率也会随之增加,且其不支持元素的删除,不利于数据的动态收缩。
为解决现有技术中存在的上述问题,本发明实施例采用哈希红黑树作为保存缓存资源文件的URL的数据结构,能够减少内存的占用率,并且易于数据的动态扩展和收缩。
为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。
图1示出了本发明实施例中的一种缓存资源文件的URL存储方法的流程图。如图1所示的缓存资源文件的URL存储方法,包括:
步骤S11:收集缓存服务器内存中的已缓存资源文件的URL。
内容分发网络,通过在网络各处放置节点服务器,在现有的互联网基础之上构建一层智能虚拟网络,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容。而这些“边缘”,也即是缓存服务器,用以缓存源站内容。引入缓存服务器后,需要以一定的方式更新过期文件。因此,本发明的实施例中,需要定时收集缓存服务器上缓存文件的URL,并在系统内存存储所述已缓存文件的URL列表,以便在接收源站发布的更新通知时,对缓存的文件进行遍历,并清除相应URL的缓存内容。
步骤S12:计算所述收集到的已缓存资源文件的URL的哈希值。
通常情况下,当将所有的已缓存资源文件的URL完整地保存在内存中时,一条URL的平均长度为150字节,再加上数据结构本身节点的长度,在已缓存资源文件的URL的数量众多的情况下,在内存中保存已缓存资源文件的URL将会占用较大的空间。
在本发明的实施例中,采用哈希红黑树来保存已缓存资源文件的URL。所谓哈希红黑树,其通过将已缓存资源文件的URL的哈希值,而非URL本身,保存在一红黑树的节点中,从而构成所述的哈希红黑树。这样,由于已缓存资源文件的URL的哈希值的长度仅为4字节,相较于一条URL的平均长度——150字节,这将可以减少已缓存资源文件的URL所占用的内存空间。
同时,由于红黑树是自平衡二叉查找树,其具有以下的属性:(1)其节点的颜色为红色或黑色;(2)每个叶节点(又称为NIL节点或者空节点)是黑色的;(3)每个红色节点的两个子节点都是黑色,即从每个叶子到根的所有路径上不能有两个连续的红色节点;(4)从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。这就决定了从根到叶子的最长的可能路径不多于最短的可能路径的两倍长,结果是这个树大致上是平衡的。因为对于红黑树的操作,比如插入、删除和查找某个值,在最坏情况下所用的时间都与树的高度成比例。这就允许红黑树在任何情况下所进行的操作都是高效的,其可以在O(log n)时间内完成数据的查找、插入和删除。因此,采用红黑树作为存储已缓存资源文件的URL的数据结构,将便于数据的动态扩展和收缩。
步骤S13:遍历预设的哈希红黑树,将所述收集到的已缓存资源文件的URL的哈希值与所述哈希红黑树中存储的已缓存资源文件的URL的哈希值进行比较。
在本发明的实施例中,为了保证存储在内存中的已缓存资源文件的URL的唯一性,在将所收集到的已缓存资源文件的URL的哈希值存储于所述哈希红黑树的节点中之前,需要对所述哈希红黑树进行遍历,以确定待存储的已缓存资源文件的URL的哈希值是否已经存在于所述哈希红黑树中。
步骤S14:当所述收集到的已缓存资源文件的URL的哈希值与所述哈希红黑树中存储的已缓存资源文件的URL的哈希值不相等时,将所述收集到的已缓存资源文件的URL的哈希值存储在到所述哈希红黑树中。
在本发明的实施例中,可以将收集到的已缓存资源文件的URL的哈希值与所述哈希树中已存储的已缓存资源文件的URL的哈希值进行比较,当所述收集到的已缓存资源文件的URL的哈希值与所述哈希红黑树中存储的已缓存资源文件的URL的哈希值相等时,则表明收集到的已缓存资源文件的URL已经存在与所述哈希红黑树中。此时,为了确保所存储在所述哈希红黑树中的数据的唯一性,可以丢弃所述收集到的已缓存资源文件的URL。
反之,当所述收集到的已缓存资源文件的URL的哈希值与所述哈希红黑树中存储的已缓存资源文件的URL的哈希值不相等时,则说明所述哈希红黑中尚未存储所述收集到的已缓存资源文件的URL相同的URL的哈希值。此时,可以将所述收集到的已缓存资源文件的URL的哈希值存储于所述哈希红黑的节点中,以便在接收源站发布的更新通知时,遍历所述哈希红黑树,以进行缓存文件的更新操作。
图2示出了本发明实施例中的另一种缓存资源文件URL存储方法的流程图。如图2所示的缓存资源文件的URL存储方法包括:
步骤S21:收集缓存服务器内存中的已缓存资源文件的URL。
在本发明的实施例中,可以通过定时收集的方式来获取缓存服务器内存中的已缓存资源文件的URL。例如,可以小时或者天为单位定时收集所述缓存服务器内存中的已缓存资源文件的URL。
步骤S22:分别采用第一哈希函数、第二哈希函数和第三哈希函数计算所述收集到的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值。
在本发明实施例中,所述哈希红黑树的构建过程为:首先在缓存服务器的内存中构建一棵空的红黑树,通过定时收集内存中存在的已缓存资源文件的URL,并计算哈希值,不断地将已缓存资源文件的URL的哈希值存储在所述红黑树的节点中,从而构建所述哈希红黑树。
但是,由于采用单一的哈希函数来计算已缓存资源文件的URL的哈希值,可能会导致哈希突,即:两个不相同的数据通过相同的哈希函数,所计算出来的键值可能是相同的,这就是所谓的哈希冲突。
因此,在具体实施中,可以采用多哈希法来降低哈希冲突的概率。例如,可以采用三个不同的哈希函数,来计算已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值,以在所述哈希树的一个节点中存储所述收集到的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值。由于一个哈希值为32位,三个哈希值共有96位,那么哈希冲突的概率将为1/296,这种冲突的概率将是极小的。因此,采用多哈希法可以在很大程度上降低哈希冲突的概率。
需要指出时,在计算已缓存资源文件的URL时,所采用的第一哈希函数、第二哈希函数和第三哈希函数可以为任意的哈希函数。但是,所述第一哈希函数、第二哈希函数和第三哈希函数为不同的哈希函数。
步骤S23:遍历预设的哈希红黑树,将所述收集到的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值分别与所述哈希红黑树中存储的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值进行比较。
在本发明的实施例中,在将所述收集到的已缓存资源文件的URL的哈希值存储于所述哈希红黑树之前,先判断所述哈希红黑树中是否已经存在相同的已缓存资源文件的URL的哈希值,以确定所述红黑树中所存储的已缓存资源文件的URL的哈希值的唯一性。也就是将所述已有的哈希红黑树作为过滤器,通过遍历所述哈希红黑树,将所收集到的已缓存资源文件的URL的哈希值分别与哈希红黑树中已存储的已缓存资源文件的URL的哈希值逐个进行比较,以确保所述哈希红黑树中所存储的已缓存资源文件的URL的唯一性,进而确保内存中所存储的已缓存资源文件的URL的唯一性。
由于在所述哈希红黑树的同一节点中存储有已缓存资源文件的URL的哈希值,包括分别第一哈希值、第二哈希值和第三哈希值。因此,需要将收集到的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值分别与所述哈希树中已存储的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值分别进行比较,以判断两者是否相同。
步骤S24:当所述收集到的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值与所述哈希红黑树中存储的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值的比较结果中至少有一组值不相等时,将所述收集到的已缓存资源文件的URL的所述第一哈希值、所述第二哈希值和所述第三哈希值存储在到所述哈希红黑树中。
由于哈希冲突的存在,当采用单一的哈希函数计算不同的已缓存资源文件的URL时,所得到的哈希值相同的几率很大。而采用三个不同的哈希函数分别计算同一已缓存资源文件的URL,得出第一哈希值、第二哈希值和第三哈希值都相同的概率极小,如前所述,为1/296。因此,当所述的三个哈希值分别相等时,几乎可以确定两个URL是相同的。反之,将三个哈希值分别进行比较,只要其中一个比较结果为不同时,则可以确定相比较的两个已缓存资源文件的URL不相同。
因此,当所述收集到的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值与所述哈希红黑树中存储的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值的比较结果中至少有一组值不相等时,则表明收集到的已缓存资源文件的URL的哈希值与所述哈希红黑树中已存储的哈希值不相同,也即是表明收集到的已缓存资源文件的URL的哈希值在所述哈希红黑树中不存在。此时,可以将收集到的已缓存资源文件的URL的哈希值(包括第一哈希值、第二哈希值和第三哈希值)存储于所述哈希红黑树的节点中。
而当所述收集到的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值与所述哈希红黑树中存储的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值进行比较,所得出的比较结果中三组值都相等时,则表明收集到的已缓存资源文件的URL的哈希值与所述哈希红黑树中已存储的哈希值相同,也即是表明收集到的已缓存资源文件的URL的哈希值在所述哈希红黑树中已经存在。此时,为了保证已缓存资源文件的URL的唯一性,可以将收集到的已缓存资源文件的URL的哈希值丢弃。
图3示出了本发明实施例中的一种缓存资源文件的URL存储装置的结构示意图。如图3所示的缓存资源文件的URL存储装置可以包括依次相连接的收集单元31、计算单元32、比较单元33和存储单元34。其中:
收集单元31,适于收集缓存服务器内存中的已缓存资源文件的URL。
计算单元32,适于计算所述收集单元31所收集到的已缓存资源文件的URL的哈希值。
比较单元33,适于遍历所述哈希红黑树,将所述计算单元32所计算得到的已缓存资源文件的URL的哈希值与所述哈希红黑树中存储的已缓存资源文件的URL的哈希值进行比较。
存储单元34,适于当所述比较单元33将所述收集到的已缓存资源文件的URL的哈希值分别与所述哈希红黑树中存储的已缓存资源文件的URL的哈希值进行比较的结果为不相等时,将所述收集到的已缓存资源文件的URL的哈希值存储在到所述哈希红黑树中。
图4示出了本发明实施例中的另一种缓存资源文件的URL存储装置的结构示意图。请参见图4,所述缓存资源文件的URL存储装置可以包括收集单元31、计算单元32、比较单元33和存储单元34。其中,所述计算单元32可以包括:第一计算子单元321、第二计算子单元322和第三计算子单元323。所述比较单元33可以包括:第一比较子单元331、第二比较子单元332和第三比较子单元333。存储单元34可以包括存储子单元341。其中,第一计算子单元321、第二计算子单元322和第三计算子单元323分别与第一比较子单元331、第二比较子单元332和第三比较子单元333相连接,第一比较子单元331、第二比较子单元332和第三比较子单元333还同时与存储子单元341相连接。
第一计算子单元321,适于采用第一哈希函数计算所述收集到的已缓存资源文件的URL的第一哈希值。
第二计算子单元322,适于采用第二哈希函数计算所述收集到的已缓存资源文件的URL的第二哈希值。
第三计算子单元323,适于采用第三哈希函数计算所述收集到的已缓存资源文件的URL的第三哈希值。
第一比较子单元331,将所述第一计算子单元321计算得到的所收集到的已缓存资源文件的URL的所述第一哈希值与所述哈希红黑树中已存储的已缓存资源文件的URL的第一哈希值进行比较。
第二比较子单元332,将所述第二计算子单元322计算得到的所收集到的已缓存资源文件的URL的所述第二哈希值与所述哈希红黑树中已存储的已缓存资源文件的URL的第二哈希值进行比较。
第三比较子单元333,将所述第三计算子单元323计算得到的所收集到的已缓存资源文件的URL的所述第三哈希值与所述哈希红黑树中已存储的已缓存资源文件的URL的第三哈希值进行比较。
存储子单元341,适于当所述第一比较子单元331、第二比较子单元332和第三比较子单元333将所述收集到的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值分别与所述哈希红黑树中已存储的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值进行比较,且比较结果中至少有一组值不相等时,将所述所收集到的已缓存资源文件的URL的第一哈希值、第二哈希值和第三哈希值存储在所述哈希红黑树中的同一节点中。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。
以上对本发明实施例的方法及系统做了详细的介绍,本发明并不限于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。