缓存数据的方法

文档序号:6333047阅读:618来源:国知局
专利名称:缓存数据的方法
缓存数据的方法
技术领域
本发明涉及缓存技术,尤其是涉及一种缓存数据的方法。背景技术
在计算机技术中,通常都要用到缓存技术,比如计算的中间结果来不及被及时处理,都要进行临时存储。传统的通用缓存技术在内存不足时会使用一些策略删除那些可能不会被再次用到的数据,比如最近最少使用策略,将最近一段时间内使用得最少的数据淘汰。内存最开始一般是连续分配的,当进行小数据存储时,若内存不足,则会淘汰一些小数据。小数据被淘汰后,其之前所占据的内存空间被释放。经过多次的存储、删除操作后,内存中会出现很多不连续的小的内存空间,即产生内存碎片。这些小的内存空间总和虽然大于一定的数值,但是却不能用于存储这个数值的,甚至不能用于存储小于这个数值的较大的数据,因此会浪费内存。

发明内容
鉴于上述问题,有必要提供一种缓存数据的方法,可以有效存取较小的数据,提高内存利用率。一种缓存数据的方法,包括以下步骤从内存中划分出过渡内存块;判断过渡内存块的剩余空间是否足够存储缓存数据,如果是,则将缓存数据存入过渡内存块;否则将过渡内存块中的数据进行压缩后存入缓存区,并清空过渡内存块中的数据。优选地,所述缓存区包括缓存块,每当当前用于存储的缓存块容量不足以存储压缩后的缓存数据时,从内存中划分一个新的缓存块。优选地,还包括将所述过渡内存块划分为块头和块体的步骤,所述块头用于记录块体的状态信息,所述块体用于存储缓存数据;所述方法还包括将所述缓存块划分为块头和块体的步骤,所述缓存块的块头用于记录缓存块的块体的状态信息,所述缓存块的块体用于存储包括过渡内存块的块头信息和过渡内存块的块体中的缓存数据的压缩数据的压缩块。优选地,当内存不足以划分出新的缓存块时,从缓存区中查找有效数据长度最小的两个缓存块,将所述两个缓存块中具有最多有效数据的压缩块集中存入其中一个缓存块,将另一个缓存块中的所有数据清除。优选地,还包括采用哈希映射表记录键值与缓存数据在过渡内存块或缓存块中的位置信息的映射关系;所述位置信息包括为过渡内存块和缓存块分配的块编号,以及缓存数据在过渡内存块或压缩块中的第一偏移地址。优选地,还包括采用块编号-压缩块信息映射表记录块编号和压缩块信息的映射关系的步骤当压缩块存入缓存块时,将压缩块的块编号和压缩块信息对应记录在块编号-压缩块信息映射表中,所述压缩块信息包括压缩块所在缓存块的块编号和压缩块在缓存块中的第二偏移地址。优选地,还包括删除缓存数据的步骤,具体为根据哈希映射表由键值获得块编号和第一偏移地址;若所述块编号与过渡内存块的块编号相同,则修改过渡内存块的块头内的块体的状态信息;否则根据所述块编号查找块编号-压缩块信息映射表,若查找到压缩块信息,则修改压缩块的块头信息和压缩块所在缓存块的块头信息;从哈希 映射表中删除所述键值。优选地,还包括查询缓存数据的步骤,具体为根据哈希映射表由键值获得块编号和第一偏移地址;若所述块编号与过渡内存块的块编号相同,则根据所述块编号和第一偏移地址得到缓存数据在过渡内存块中的位置,根据该位置从过渡内存块中读取缓存数据; 否则根据所述块编号查找块编号_压缩块信息映射表,若查找到压缩块信息,则根据压缩块信息中包含的缓存块的块编号和第二偏移地址从缓存块中读取压缩块,然后结合第一偏移地址从解压缩后的数据中读取所需的缓存数据。上述方法,由于较小的缓存数据是先在过渡内存块中存储,然后作为一个整体存入缓存区,因此可以将小数据合并成大数据进行存取。消除了小数据在内存中因为进行频繁存储、删除而导致的内存碎片。此外对缓存数据进行压缩,还可进一步更好地利用内存空间。

图1为一实施例的缓存数据的方法流程图;图2为过渡内存块和缓存块的示意图;图3为获取缓存数据存储位置的示意图;图4为合并缓存块中的压缩块的示意图。
具体实施方式以下结合附图进行进一步说明。如图1所示,为一实施例的缓存数据的方法流程图。该方法包括以下步骤S10:从内存中划分出过渡内存块。过渡内存块是从内存中划分出来的一块存储区域,用于暂时存储缓存数据。本实施例的缓存数据的方法用于对小数据进行缓存,即对大小为1字节至8000字节的数据进行缓存,过渡内存块必须至少能够存储可能存储的最大数据的长度,即需大于或等于8000字节。S20 判断过渡内存块的剩余空间是否足够存储缓存数据。如果剩余空间足够,进入步骤S30,否则转入步骤S40。S30:将缓存数据存入过渡内存块。缓存数据在过渡内存块中连续存储。S40:将过渡内存块中的缓存数据进行压缩后存入缓存区,并清空过渡内存块中的数据。将过渡内存块中所有的缓存数据进行压缩后作为一个整体存入缓存区,过渡内存块则可被清空,然后继续接收新的缓存数据。本实施例的方法,由于较小的缓存数据是先在过渡内存块中存储,然后作为一个整体存入缓存区,因此可以将小数据合并成大数据进行存取。消除了小数据在内存中因为进行频繁存储、删除而导致的内存碎片。此外,对缓存数据进行压缩,还可进一步更好地利用内存空间。进一步地,还包括将所述过渡内存块划分为块头和块体的步骤。如图2所示,过渡内存块10包括两部分块头11和块体12。块头11内存储了块体12的状态信息,块体12 可用于存储缓存数据13。其中,块体12的状态信息包括块体12内的数据总长度、有效数据个数、有效数据的长度以及块编号。最初划分过渡内存块10时,块体12内没有存储任何数据,剩余存储空间最大,块头11内记录的数据总长度、有效数据个数、有效数据的长度的值均为0,块编号也设定一个初始值。最开始时,由于块体12的存储空间大于等 于所有可能存储的小数据,因此是足够存储的。当存储了一部分缓存数据13后,块体12剩余的存储空间变小,有可能不足以存储接下来的缓存数据14。在步骤S30中,结合图2,若块体12剩余的存储空间足够存储接下来的缓存数据 14,则将缓存数据14紧邻块体12中已经存储的缓存数据13进行存储,若块体12中无数据, 则从块体12的起始位置开始存储。存储了新的缓存数据14之后,需要将块体12的存储情况进行更新,即更新块体12的状态信息,包括将新的缓存数据的长度计入数据总长度、有效数据个数增加1、新的缓存数据的有效长度计入有效数据的长度,块编号不变。缓存数据 13、14在过渡内存块10中的位置信息是相对于块体12的起始地址的第一偏移地址。本实施例中,采用哈希(hash)映射表来记录缓存数据13的位置信息,每存入块体12 —个缓存数据13,将过渡内存块10的块编号(seqno)连同第一偏移地址存入哈希映射表,并与一个键值(key)对应。因此可以通过哈希映射表中的键值(key)得到缓存数据(value)的位置 fn息ο在步骤S40中,结合图2,当缓存数据14不能继续存入过渡内存块10中时,将过渡内存块10中的所有缓存数据13转存入缓存区200。缓存区200包括至少一个缓存块20。 缓存块20同样是从内存中划出的一块内存区域,包括块头21和块体22,其中缓存块20的块头21存储缓存块20的相关信息,具体包括块体22中存储的总的有效数据的长度和有效数据个数。缓存块20的块体22的存储空间相比于过渡内存块10的块体12的存储空间大, 一般是缓存块20的块体22的存储空间数倍于过渡内存块10的块体12的存储空间。在转存之前将过渡内存块10进行压缩。压缩是仅对过渡内存块10的块体12中的缓存数据进行压缩,块头11内的数据保留,因此存入缓存区200的是包括块头11中的信息和块体12中缓存数据的压缩数据的压缩块23,既保留了过渡内存块10的块头11中的信息同时又拥有块体12内的缓存数据。因此压缩块23的块编号即是原来过渡内存块10的块编号。块体22用于存储压缩块23。用一个块编号-压缩块信息映射表(seqno映射表)来记录压缩块信息。每存入一个压缩块23到块体22中,就将压缩块信息加入seqno映射表,并与压缩块23对应的块编号对应存储。压缩块信息主要包括所在的缓存块20的块编号以及在缓存块20内的第二偏移地址。通过seqno映射表,可先由哈希映射表获得块编号,根据块编号获得压缩块信息, 进而根据压缩块信息得到缓存数据13的位置。缓存数据转存完成后,过渡内存块10中的缓存数据被清除,可用于接收存储新的缓冲数据,即块体12中没有数据,同时块头11中保存的块体12的状态信息也被重置,并且为过渡内存块10分配新的块编号。本实施例中,过渡内存块10和缓存块20都有块编号, 用一个64位的二进位整数表示,每次划出新的缓存块20时、过渡内存块10被清空时或者缓存块20被清空时,块编号都会重新分配,并且在已分配的块编号的基础上增加1。缓存区200最初包括一个缓存块20,压缩块23持续存入块体22会导致缓存块20 存储空间减少。如果当前用于存储的缓存块20 (—般用一个指针来指示)的剩余容量不足以存储压缩块23时,就需要另外再从内存中划出一块缓存块加入缓存区200。一般来说,缓存块的大小保持一致以便于管理。并且缓存块之间是相互独立的,不必须是连续的内存区域。划出新的缓存块后,新的压缩块即可存入新增的缓存块。当用于缓存数据的内存不足以划分出新的缓存块时,则表明内存不足。根据下述方法淘汰驻留于缓存区200中的一些数据。用于缓存数据的内存可以是指定容量大小的专用于缓存数据的内存,也可以是系统中整个可以调用的内存。从缓存区200中找出有效数据长度最小的两个缓存块,根据缓存块的块头中的相关信息即可得到有效数据长度。将这两个缓存块的缓存数据合并,即将两个缓存块中具有最多有效数据的压缩块集中存入其中一个缓存块,将另一个缓存块中的所有数 据清除,并更新两个缓存块的相关信息。在得到有效数据长度最小的两个缓存块后,根据缓存块中每个压缩块的块头存储的信息可得 到压缩块中有效数据的个数。通过比较这两个缓存块中的所有压缩块中有效数据的个数,可将压缩块按照有效数据的个数从多到少进行排序,然后获得具有最多有效数据的多个压缩块。将最多有效数据的压缩块集中存入其中一个缓存块,并且清除该缓存块中有效数据较少的压缩块,直到该缓存块中不能存入接下来的压缩块为止。另一个缓存块内的压缩块则全部被清除,成为一个空的缓存块。如图4所示,缓存块m和缓存块η是有效数据总长度最小的两个缓存块。缓存块m内存储了具有10个有效数据的压缩块1、具有5 个有效数据的压缩块2和具有8个压缩块3,缓存块η内存储了具有7个有效数据的压缩块 4、具有6个有效数据的压缩块5以及具有3个有效数据的压缩块6。当内存不足时,将这两个缓存块合并的方法是将具有最多有效数据的压缩块如压缩块1、压缩块3以及压缩块4存入缓存块η (或缓存块m),另一个缓存块m(或缓存块η)中的数据全部清除。合并完成后, 将缓存块m和缓存块η的相关信息更新,具体是为缓存块m和缓存块η分配新的块编号,更新缓存块中的有效数据个数和有效数据长度。同时被清除的压缩块在seqno映射表中也被删除。本实施例的方法的删除缓存数据的操作并不真正删除缓存数据,而是将访问缓存数据的位置信息删除。具体的,如图3所示,过渡内存块10中缓存数据的位置信息可由哈希映射表直接得到,因此若根据键值(key)得到的块编号(seqno)是过渡内存块10的块编号,则直接删除哈希映射表中的键值(key)及对应的缓存数据(value)位置信息。同时修改过渡内存块10的块头信息。若块编号(seqno)不是过渡内存块10的块编号,查找seqno映射表,若seqno映射表中也没有该seqno,则可直接删除哈希映射表中的key。若根据seqno 查找到对应的压缩块信息,则首先修改压缩块的相关信息,主要包括减少有效数据个数以及有效数据的总长度;其次修改缓存块的相关信息,主要也是减少有效数据个数以及有效数据的总长度;最后将key从哈希映射表里删除。本实施例的方法还包括查询缓存数据的步骤。首先通过哈希映射表得到key对应的缓存数据的位置信息(包括seqno和第一偏移地址),如果seqno与过渡内存块10的块编号相同,则直接根据过渡内存块10的起始地址和第一偏移地址获得缓存数据在内存中的位置,直接从过渡内存块10中读取缓存数据。如果Seqno与过渡内存块10的块编号不相同,则继续查询块seqno映射表,如果seqno映射表中不存在上述的seqno,则从哈希映射表中删除相应的key。否则根据seqno查找到压缩块信息,根据压缩块信息中的缓存块的块编号和第二偏移地址从相应的缓存块中读取压缩块进行解压缩,然后根据第一偏移地址从解压缩后的缓存数据集合中读取需要查询的缓存数据。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
权利要求
1.一种缓存数据的方法,其特征在于,包括以下步骤从内存中划分出过渡内存块;判断过渡内存块的剩余空间是否足够存储缓存数据,如果是,则将缓存数据存入过渡内存块;否则将过渡内存块中的数据进行压缩后存入缓存区,并清空过渡内存块中的数据。
2.如权利要求1所述的缓存数据的方法,其特征在于,所述缓存区包括缓存块,每当当前用于存储的缓存块容量不足以存储压缩后的缓存数据时,从内存中划分一个新的缓存块。
3.如权利要求2所述的缓存数据的方法,其特征在于,还包括将所述过渡内存块划分为块头和块体的步骤,所述块头用于记录块体的状态信息,所述块体用于存储缓存数据;所述方法还包括将所述缓存块划分为块头和块体的步骤,所述缓存块的块头用于记录缓存块的块体的状态信息,所述缓存块的块体用于存储包括过渡内存块的块头信息和过渡内存块的块体中的缓存数据的压缩数据的压缩块。
4.如权利要求3所述的缓存数据的方法,其特征在于,当用于缓存数据的内存不足以划分出新的缓存块时,从缓存区中查找有效数据长度最小的两个缓存块,将所述两个缓存块中具有最多有效数据的压缩块集中存入其中一个缓存块,将另一个缓存块中的所有数据清除。
5.如权利要求3所述的缓存数据的方法,其特征在于,还包括采用哈希映射表记录键值与缓存数据在过渡内存块或缓存块中的位置信息的映射关系;所述位置信息包括为过渡内存块和缓存块分配的块编号,以及缓存数据在过渡内存块或压缩块中的第一偏移地址。
6.如权利要求5所述的缓存数据的方法,其特征在于,还包括采用块编号_压缩块信息映射表记录块编号和压缩块信息的映射关系的步骤当压缩块存入缓存块时,将压缩块的块编号和压缩块信息对应记录在块编号_压缩块信息映射表中,所述压缩块信息包括压缩块所在缓存块的块编号和压缩块在缓存块中的第二偏移地址。
7.如权利要求6所述的缓存数据的方法,其特征在于,还包括删除缓存数据的步骤,具体为根据哈希映射表由键值获得块编号和第一偏移地址;若所述块编号与过渡内存块的块编号相同,则修改过渡内存块的块头内的块体的状态 fn息;否则根据所述块编号查找块编号-压缩块信息映射表,若查找到压缩块信息,则修改压缩块的块头信息和压缩块所在缓存块的块头信息;从哈希映射表中删除所述键值。
8.如权利要求6所述的缓存数据的方法,其特征在于,还包括查询缓存数据的步骤,具体为根据哈希映射表由键值获得块编号和第一偏移地址;若所述块编号与过渡内存块的块编号相同,则根据所述块编号和第一偏移地址得到缓存数据在过渡内存块中的位置,根据该位置从过渡内存块中读取缓存数据;否则根据所述块编号查 找块编号-压缩块信息映射表,若查找到压缩块信息,则根据压缩块信息中包含的缓存块的块编号和第二偏移地址从缓存块中读取压缩块,然后结合第一偏移地址从解压缩后的数据中读取所需的缓存数据。
全文摘要
一种缓存数据的方法,包括以下步骤从内存中划分出过渡内存块;判断过渡内存块的剩余空间是否足够存储缓存数据,如果是,则将缓存数据存入过渡内存块;否则将过渡内存块中的数据进行压缩后存入缓存区,并清空过渡内存块中的数据。上述方法,由于较小的缓存数据是先在过渡内存块中存储,然后作为一个整体存入缓存区,因此可以将小数据合并成大数据进行存取。消除了小数据在内存中因为进行频繁存储、删除而导致的内存碎片。此外对缓存数据进行压缩,还可进一步更好地利用内存空间。
文档编号G06F12/08GK102436421SQ20101029733
公开日2012年5月2日 申请日期2010年9月29日 优先权日2010年9月29日
发明者朱正平, 沈妍 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1