CN104850507A - 一种数据缓存方法和数据缓存装置 - Google Patents

一种数据缓存方法和数据缓存装置 Download PDF

Info

Publication number
CN104850507A
CN104850507A CN201410055379.6A CN201410055379A CN104850507A CN 104850507 A CN104850507 A CN 104850507A CN 201410055379 A CN201410055379 A CN 201410055379A CN 104850507 A CN104850507 A CN 104850507A
Authority
CN
China
Prior art keywords
data block
remaining space
vernier
cache pool
address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201410055379.6A
Other languages
English (en)
Other versions
CN104850507B (zh
Inventor
阮佳彬
蔡伟林
陆莉
王海洋
段文文
李映辉
陈秋滢
陈旺林
陈文辉
曾岳锋
秦铭雪
樊伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Tencent Cloud Computing Beijing Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201410055379.6A priority Critical patent/CN104850507B/zh
Publication of CN104850507A publication Critical patent/CN104850507A/zh
Application granted granted Critical
Publication of CN104850507B publication Critical patent/CN104850507B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明实施例公开了一种数据缓存方法和数据缓存装置,可适用于存储长度不固定的数据,避免存储空间的浪费。本发明实施例方法包括:当数据块存入缓存池时,获取所述缓存池中游标指向的第一剩余空间的容量;判断所述游标指向的第一剩余空间的容量与所述数据块的长度的大小关系;若所述游标指向的第一剩余空间的容量大于或等于所述数据块的长度,从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第一剩余空间中;当所述数据块存储到所述第一剩余空间之后,将所述游标移动到所述数据块的尾部,移动后的所述游标指向所述缓存池中存储所述数据块之后的第一剩余空间。

Description

一种数据缓存方法和数据缓存装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据缓存方法和数据缓存装置。
背景技术
在互联网服务中,常须提供满足大量并发请求的服务,基于目前的计算机体系结构,存在一种是使用哈希缓存方法来缓存数据的解决方案。
但是现有的哈希缓存方法至少存在以下缺陷:第一,采用的是固定长度的存储块,只适用于存储长度差别小的数据;第二,对于长度不固定的数据需要预留大量的空间,造成数据非紧凑存储,浪费大量存储空间。
发明内容
本发明实施例提供了一种数据缓存方法和数据缓存装置,可适用于存储长度不固定的数据,避免存储空间的浪费。
为解决上述技术问题,本发明实施例提供以下技术方案:
第一方面,本发明实施例提供一种数据缓存方法,包括:
当数据块存入缓存池时,获取所述缓存池中游标指向的第一剩余空间的容量;
判断所述游标指向的第一剩余空间的容量与所述数据块的长度的大小关系;
若所述游标指向的第一剩余空间的容量大于或等于所述数据块的长度,从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第一剩余空间中;
当所述数据块存储到所述第一剩余空间之后,将所述游标移动到所述数据块的尾部,移动后的所述游标指向所述缓存池中存储所述数据块之后的第一剩余空间。
第二方面,本发明实施例还提供一种数据缓存装置,包括:
第一剩余空间获取模块,用于当数据块存入缓存池时,获取所述缓存池中游标指向的第一剩余空间的容量;
判断模块,用于判断所述游标指向的第一剩余空间的容量与所述数据块的长度的大小关系;
数据块存储模块,用于当所述游标指向的第一剩余空间的容量大于或等于所述数据块的长度时,从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第一剩余空间中;
游标移动模块,用于当所述数据块存储到所述第一剩余空间之后,将所述游标移动到所述数据块的尾部,移动后的所述游标指向所述缓存池中存储所述数据块之后的第一剩余空间。
从以上技术方案可以看出,本发明实施例具有以下优点:
在本发明实施例中,当有数据块需要存入缓存池时,获取缓存池中游标指向的第一剩余空间的容量,然后判断该第一剩余空间是否足够存储该数据块,当游标指向的第一剩余空间的容量大于或等于数据块的长度时,从游标指向的地址空间开始将数据块的组成部分依次存储到第一剩余空间中,并且在数据存储到第一剩余空间之后,将游标移动到该数据块的尾部,则移动后的游标指向缓存池中存储该数据块之后的第一剩余空间。由于数据块在缓存池中存储在游标指向的第一剩余空间中,并且游标也会及时的移动到缓存池中存储的该数据块的尾部,故数据块在缓存池中的存储是按照游标指向的第一剩余空间来进行存储的,游标总是在存储完数据块后就移动到刚存储的数据块的尾部,故对于数据块的长度不固定时,也可以通过游标指示出缓存池中仍可用于存储数据的剩余空间,从而将数据块存储到缓存池中的剩余空间中,故本发明实施例可适用于存储长度不固定的数据,实现缓存池中数据块的紧凑存储,避免存储空间的浪费。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种数据缓存方法的流程方框示意图;
图2-a为本发明实施例中数据缓存方法的实现过程示意图;
图2-b为本发明实施例中数据块的组成部分示意图;
图3-a为本发明实施例提供的一种数据缓存装置的组成结构示意图;
图3-b为本发明实施例提供的另一种数据缓存装置的组成结构示意图;
图3-c为本发明实施例提供的另一种数据缓存装置的组成结构示意图;
图3-d为本发明实施例提供的另一种数据缓存装置的组成结构示意图;
图3-e为本发明实施例提供的另一种数据缓存装置的组成结构示意图;
图4为本发明实施例提供的数据缓存方法应用于终端的组成结构示意图。
具体实施方式
本发明实施例提供了一种数据缓存方法和数据缓存装置,可适用于存储长度不固定的数据,避免存储空间的浪费。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域的技术人员所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本发明的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、***、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
以下分别进行详细说明。
本发明数据缓存方法的一个实施例,可应用于内存***中数据的缓存,具体可以包括如下步骤:当数据块存入缓存池时,获取缓存池中游标指向的第一剩余空间的容量;判断游标指向的第一剩余空间的容量与数据块的长度的大小关系;若游标指向的第一剩余空间的容量大于或等于数据块的长度,从游标指向的地址空间开始将数据块的组成部分依次存储到第一剩余空间中;当数据块存储到第一剩余空间之后,将游标移动到数据块的尾部,移动后的游标指向缓存池中存储数据块之后的第一剩余空间。
请参阅图1所示,本发明一个实施例提供的数据缓存方法,可以包括如下步骤:
101、当数据块存入缓存池时,获取缓存池中游标指向的第一剩余空间的容量。
在本发明实施例中,缓存池是用于存储数据块的,在缓存池中还设置有游标,用于指示该缓存池中将要存储的新数据的起始位置,在缓存池中存储数据时,优先选择存储到缓存池中仍空闲的地址空间,则该游标也可以理解为指向的是缓存池中还可用于存储数据的剩余空间,另外本发明实施例中游标也可以理解的为一个指针。在缓存池处于初始化状态时,本发明实施例中缓存池为空,此时游标指向的缓存池的头部,整个缓存池的地址空间都是空闲的,本发明实施例中将初始化后缓存池中可用于存储数据的地址空间称之为“第一剩余空间”,第一剩余空间指的是从游标指向的地址空间直到缓存池尾部构成的地址空间,并且通过游标来指示该第一剩余空间的起始位置,第一剩余空间的终止位置为缓存池的尾部。在本发明实施例中,当有数据块需要存入缓存池时,首先通过游标找到缓存池中的第一剩余空间,并且获取到该第一剩余空间的容量,从而可获知该缓存池还可以存储多大长度的数据块。
在本发明的一些实施例中,为了可以快速查找到缓存池中存储的数据块,在缓存池中存储数据块时,可以使用哈希缓存的方式来存储数据块,则在数据块中可以携带键(key),在将数据块存储到缓存池时,可以通过键来查询哈希表,从而找到应该将该数据块存储到缓存池中的哪个地址空间,则查找到的地址空间就是与该键对应的值(value)。需要说明的是,在通过键查找对应的值时,可能会查找到多个值,则每个值都对应于缓存池中的一个数据块,各个数据块之间可以通过双向链表串起来,则缓存池中的每个数据块都包括如下组成部分:键、上一块地址、下一块地址、数据长度、数据内容。其中,上一块地址指示的是具有相同键值的上一个数据块的存储地址,下一块地址指的是具有相同键值的下一个数据块的存储地址,数据长度指示的是数据内容的长度,而数据内容才是数据块中携带的真正数据。
在本发明的一些实施例中,步骤101获取缓存池中游标指向的第一剩余空间的容量,具体可以包括:根据数据块的键查询哈希表,从缓存池中查找到第四数据块,第四数据块为与数据块的键取值相同的数据块,则缓存池中从第四数据块的尾部开始直到缓存池的尾部为第一剩余空间。也就是说,通过数据块携带的键查询哈希表,可以从缓存池中查找到与该数据块的键取值相同的数据块,本发明实施例中定义为“第四数据块”,并且从第四数据块的尾部开始直到缓存池的尾部为第一剩余空间。
102、判断游标指向的第一剩余空间的容量与数据块的长度的大小关系。
在本发明实施例中,获取到缓存池中游标指向的第一剩余空间的容量之后,为了保证数据块能够存储到缓存池中,需要判断第一剩余空间是否足够存储数据块,故执行步骤102判断游标指向的第一剩余空间的容量与数据块的长度的大小关系,则判断结果可以是第一剩余空间的容量大于数据块的长度,也可以是第一剩余空间的容量等于数据块的长度,也可以是第一剩余空间的容量小于数据块的长度。具体的,当判断结果为第一剩余空间的容量大于或等于数据块的长度时,触发执行步骤103。
103、若游标指向的第一剩余空间的容量大于或等于数据块的长度,从游标指向的地址空间开始将数据块的组成部分依次存储到第一剩余空间中。
在本发明实施例中,若游标指向的第一剩余空间的容量大于或等于数据块的长度,则说明当前缓存池中的剩余空间还足够于存储数据块,从游标指向的地址空间开始将数据块的组成部分依次存储到第一剩余空间中。其中,依次存储指的是数据块的各个组成部分按照数据组成的排列结构存储到第一剩余空间,则该数据块在第一剩余空间中是紧凑存储的。
104、当数据块存储到第一剩余空间之后,将游标移动到数据块的尾部,移动后的游标指向缓存池中存储数据块之后的第一剩余空间。
在本发明实施例中,数据块存储到第一剩余空间之后,缓存池中的游标相应的移动到数据块的尾部,则移动后的游标指向的是缓存池中存储数据块之后的第一剩余空间,即本发明实施例中随着数据块的存储,游标是不断的向缓存池的尾部移动,实时的保持在新存储数据块的尾部,故该游标指向的总是缓存池中的剩余空间,在下一次存储数据块时,该游标可以指示出数据块可以存储的地址空间。
在本发明的实施例中,当游标指向的第一剩余空间的容量大于或等于数据块的长度时,执行了步骤103和步骤104,那么当游标指向的第一剩余空间的容量小于数据块的长度时,本发明实施例提供的数据缓存方法还可以包括如下步骤:
A1、将游标移动到缓存池中已存储的第一数据块,并将第一数据块从缓存池中淘汰掉,第一数据块被淘汰掉后在缓存池中腾出的地址空间为游标指向的第二剩余空间;
A2、从游标指向的地址空间开始将数据块的组成部分依次存储到第二剩余空间中;
A3、当数据块存储到第二剩余空间之后,将游标移动到数据块的尾部,移动后的游标指向缓存池中存储数据块之后的第二剩余空间。
其中,当游标指向的第一剩余空间的容量小于数据块的长度时,说明缓存池中的当前剩余空间不足以存储该数据块,则执行步骤A1将游标移动到缓存池中已存储的第一数据块,并将该第一数据块从缓存池中淘汰掉,则第一数据块从缓存池被清除掉之后会腾出相应的地址空间,本发明实施例中将通过删除缓存池中已存储的数据块而得到的地址空间定义为“第二剩余空间”,需要说明的是,在本发明实施例中,第一剩余空间指的是缓存池在初始化之后就存在的剩余空间,而第二剩余空间为缓存池中通过对已存储的数据块的淘汰而腾出的地址空间。由于游标移动到了第一数据块,而第一数据块被淘汰掉,说明该游标指向了第二剩余空间。通过前述描述可知,本发明实施例中游标是随着缓存池中存储数据块以及淘汰数据块而及时移动的。具体的,在本发明的一些实施例中第一数据块可以指的是缓存池中存储时间最长的数据块,故本发明实施例中在数据存储空间有限的情况下,若需要存储新数据,可以按一定算法清除存储时间较久的老数据。另外,第一数据块也可以指的是特定类型的数据块,例如可以是优先级最低的数据块,具体结合应用场景来决定。
在淘汰了第一数据块而得到第二剩余空间之后,执行步骤A2从游标指向的地址空间开始将数据块的组成部分依次存储到第二剩余空间中,也就是说,本发明实施例中,当第一剩余空间不足以存储数据块时,可以从缓存池中清除掉部分数据以腾出地址空间,可以用于存储新的数据块。当数据块存储到第二剩余空间之后,执行步骤A3将游标移动到数据块的尾部,则移动后的游标指向缓存池中存储数据块之后的第二剩余空间。即本发明实施例中随着数据块的存储,游标是不断的移动,实时的保持在新存储数据块的尾部,故该游标指向的总是缓存池中的剩余空间,在下一次存储数据块时,该游标可以指示出数据块可以存储的地址空间。
需要说明的是,在本发明实施例中,只有在游标指向的第一剩余空间不足以存储数据块时,才执行步骤A1对缓存池中已存储的数据块进行淘汰,具体的,被淘汰的数据块还可以是缓存池中存储时间最长的数据块,而现有技术中按照哈希缓存的方式则会采用定时检测存储时间的方法来淘汰老数据,按照现有的这种实现方式需要定时检测缓存池,会导致不必要的检测过程,而本发明实施例中是即时淘汰老数据的,即老数据是在只有在缓存池的空间不足时才淘汰的,而没有定时检测数据存储时间的过程,减少计算机不必要的淘汰处理过程。
需要说明的是,在本发明的一些实施例中,步骤A1将第一数据块从缓存池中淘汰掉之后,还可以包括如下步骤:
步骤A1a、判断游标指向的第二剩余空间的容量与数据块的长度的大小关系;
步骤A1b、若游标指向的第二剩余空间的容量大于或等于数据块的长度,触发执行步骤A2从游标指向的地址空间开始将数据块的组成部分依次存储到第二剩余空间中;
A1c、若游标指向的第二剩余空间的容量小于数据块的长度,将缓存池中已存储的第二数据块从缓存池中淘汰掉,并将第二数据块被淘汰掉后在缓存池中腾出的地址空间合并入第二剩余空间,触发执行步骤A2从游标指向的地址空间开始将数据块的组成部分依次存储到第二剩余空间中,第二数据块为缓存池中位于游标之后且与第一数据块相邻的数据块。
也就是说,在将第一数据块淘汰掉了之后,仍需要判断第二剩余空间是否足以存储数据块,当游标指向的第二剩余空间的容量小于数据块的长度,执行步骤A1c将缓存池中已存储的第二数据块从缓存池中淘汰掉,即当淘汰掉第一数据块仍不足以存储数据块时,还需要继续淘汰其它数据块,为了保证缓存池中数据块的紧凑存储,需要将缓存池中位于游标之后且与第一数据块相邻的数据块(即第二数据块)淘汰掉,则第二数据块被淘汰掉后在缓存池中会腾出的地址空间,可以将腾出的地址空间合并入第二剩余空间,然后再触发执行步骤A2。可以理解的是,当第一数据块和第二数据块合并出的第二剩余空间仍不足以存储数据块时,需要多次执行步骤A1a至A1c,以保证新数据块在缓存池中的存储。
在本发明的另一些实施例中,步骤A1将第一数据块从缓存池中淘汰掉之后,还可以包括如下步骤:
步骤A1a、判断游标指向的第二剩余空间的容量与数据块的长度的大小关系;
步骤A1b、若游标指向的第二剩余空间的容量大于或等于数据块的长度,触发执行步骤A2从游标指向的地址空间开始将数据块的组成部分依次存储到第二剩余空间中;
步骤A1d、若游标指向的第二剩余空间的容量小于数据块的长度,当缓存池中从游标指向的地址空间直到缓存池的尾部都不存在已存储的数据块时,将第一剩余空间合并入第二剩余空间,并触发执行步骤A2从游标指向的地址空间开始将数据块的组成部分依次存储到第二剩余空间中。
也就是说,在本发明的一些实施例中,第一剩余空间的终止位置就是缓存池的尾部,在缓存池中从第二剩余空间开始直到缓存池的尾部之间没有已存储的数据块时,说明第一剩余空间和第二剩余空间相邻,若第二剩余空间又不足以存储数据块,可以将第一剩余空间和第二剩余空间进行合并,将第一剩余空间合并入第二剩余空间中,然后再指向步骤A2。
需要说明的是,若第二剩余空间直到缓存池的尾部之间都没有可供淘汰的数据块,且第二剩余空间在合并入第一剩余空间之后仍不足以存储数据块时,还可以再执行步骤A1至A3。
在本发明的一些实施例中,步骤101具体可以包括:根据数据块的键查询哈希表,从缓存池中查找到第四数据块,第四数据块为与数据块的键取值相同的数据块,则缓存池中从第四数据块的尾部开始直到缓存池的尾部为第一剩余空间。在这种情况下,第四数据块包括:键、上一块地址、下一块地址、数据长度、数据内容,则在步骤103从游标指向的地址空间开始将数据块的组成部分依次存储到第一剩余空间中之后,还可以包括如下步骤:
B1、将数据块的上一块地址设置为预置的符号;
B2、将数据块的下一块地址设置为第四数据块的存储地址;
B3、将第四数据块的上一块地址设置为数据块的存储地址。
其中,步骤B1至步骤B3中所述的数据块指的是步骤103中存储到第一剩余空间的数据块,另外第四数据块可以通过查询哈希表查询到,并且第四数据块的键的取值与数据块携带的键相同。若在缓存池中数据块中包括有上一块地址和下一块地址,则在完成对数据块的存储之后,由于缓存池中已存储的数据块发生了变化,故需要对数据块的上一块地址以及下一块地址进行修改,对第四数据块的上一块地址进行修改,以实现对双向链表的实时维护,保证通过双向链表能够查找到键的取值相同的所有数据块在缓存池中的存储位置。另外,通常情况下为了便于查询到最新存储到缓存池中的数据块,通过键查找到的第四数据块可以是最新存储到缓存池中的数据块,即第四数据块就是双向链表的表头。按此实现方式,在步骤103中数据块存储到缓存池的第一剩余空间之后,该数据块就应该是代替第四数据块成为双向链表的表头,将该数据块的下一块地址设置为第四数据块的存储地址,此时第四数据块成为除该数据块以外最新存储到缓存池中的数据块。此时由于步骤B1中数据块是最新存储到缓存池中的,该数据块是不存在上一块地址的,故使用一个预置的符号来表示,例如用空格作为预置符号,则当上一块地址填上空格时就表示不存在上一块地址,当然也可以使用其他符号作为预置符号,例如字母等。
需要说明的是,在本发明的一些实施例中,步骤103从游标指向的地址空间开始将数据块的组成部分依次存储到第一剩余空间中之后,还包括如下步骤:对哈希表进行修改,以使根据键查询修改后的哈希表时查找到数据块。即在步骤103中数据块存储到第一剩余空间之后,修改哈希表,使得通过该数据块的键查询修改后的哈希时能够查找到该数据块。
在本发明的一些实施例中,当缓存池中已存储的第二数据块包括:键、上一块地址、下一块地址、数据长度、数据内容时,其中,第二数据块为缓存池中位于游标之后且与第一数据块相邻的数据块,步骤A1将第一数据块从缓存池中淘汰掉之后,还包括:将第二数据块的上一块地址设置为预置的符号。也就是说,通过双向链表第一数据块和第二数据块相邻,则第一数据块的下一块地址指的是第二数据块的存储地址,第二数据块的上一块地址指的是第一数据块的存储地址,那么当第一数据块被淘汰掉之后,仍需要进行一步的维护该双向链表,即需要打破第一数据块和第二数据块的链表关系,将第二数据块的上一块地址修改该预置符号,另外当第一数据块是缓存池中存储时间最长的数据块时,若第一数据块被淘汰掉之后,第二数据块就成为缓存池中存储时间最长的数据块。
通过以上对本发明实施例的描述可知,当有数据块需要存入缓存池时,获取缓存池中游标指向的第一剩余空间的容量,然后判断该第一剩余空间是否足够存储该数据块,当游标指向的第一剩余空间的容量大于或等于数据块的长度时,从游标指向的地址空间开始将数据块的组成部分依次存储到第一剩余空间中,并且在数据存储到第一剩余空间之后,将游标移动到该数据块的尾部,则移动后的游标指向缓存池中存储该数据块之后的第一剩余空间。由于数据块在缓存池中存储在游标指向的第一剩余空间中,并且游标也会及时的移动到缓存池中存储的该数据块的尾部,故数据块在缓存池中的存储是按照游标指向的第一剩余空间来进行存储的,游标总是在存储完数据块后就移动到刚存储的数据块的尾部,故对于数据块的长度不固定时,也可以通过游标指示出缓存池中仍可用于存储数据的剩余空间,从而将数据块存储到缓存池中的剩余空间中,故本发明实施例可适用于存储长度不固定的数据,实现缓存池中数据块的紧凑存储,避免存储空间的浪费。
为便于更好的理解和实施本发明实施例的上述方案,下面举例相应的应用场景来进行具体说明。
目前计算机存储设备主要是硬盘和内存。硬盘的特点是:存储容量大、价格低、无须通电就可以维持存储状态,但读写速度慢,适合存储长期但较少访问的数据;内存的特点是:读写速度快,但存储容量小、价格高、需要通电维持存储状态,适合存储短期但频繁访问的数据。哈希缓存方法正是利用计算体系结构这一特点,解决短期内大量用户请求造成计算机磁盘性能无法及时响应的问题,极其适合互联存储服务的需求特点。现有的哈希缓存主要存储长度变化小的数据,一般需要定时淘汰过期数据,存在空间浪费、效率低下、适用范围小的问题。在本发明实施例提供的数据缓存方法中实现哈希缓存时,可适用于存储长度不固定的数据,避免存储空间的浪费,并且无需定时检测,简化了数据块的淘汰处理过程。
由于提供互联网服务对***存储性能要求很高,同时,用户需求变化快,对解决方案的普适性要求极高。常规缓存方案存在空间浪费、效率低下、适用范围小等弊端,无法快速响应互联网需求。本发明在缓存池的数据块中增加数据长度字段,使得数据紧凑存储,并且即时淘汰老数据。
请参阅如图2-a所示,为本发明实施例中数据缓存方法的实现过程示意图,以将内存作为缓存池为例进行说明,其中,数据缓存装置的结构设计可如图2-a所示,具体的,
哈希表:用于快速索引缓存池中的数据块,通过键的取值快速找到数据块在内存中的存储位置。
缓存池:用于存储数据块,并且在缓存池中不再划分出长度相等的多个存储块,而是直接存储各个数据块,如图2-a所示,以当前状态下缓存池中存储了n个数据块为例,分别为数据块1、数据块2、…、数据块(k-1)、数据块k、数据块(k+1)、…、数据块n,其中,k小于n,k和n都是非零自然数,通过键查询哈希表,从缓存池中查找到数据块1。
游标:是一个指针,用于指示新数据的将要存储的起始位置,它在缓存池的内存范围内循环移动。
*A:由于数据块长度不确定,在缓存池的尾部可能出现一小块的空闲内存,这里记为即第一剩余空间。
*B:由于数据块长度不确定,从缓存池中清理出来的地址空间记为第二剩余空间,一般清理出来的地址空间会比新数据块所需要的空间大一些,因此存储新数据块后,可能会剩余一小部分空闲内存,也称之为第二剩余空间。
请参阅如图2-b所示,为本发明实施例中数据块的组成部分示意图,其中数据块的结构如图2-b所示,其中,每个数据块都包括:键、上一块地址、下一块地址、数据长度、数据内容,具体的:
键:通过键值和图2-a所示的哈希表,可以快速找到数据块的存储位置。缓存池中的数据块是紧凑存储的,具有相同键的数据块,通过“上一块地址”和“下一块地址”连接形成一个双向链表。
上一块地址:指示具有相同键的取值的上一块数据,它将数据块连接起来,形成一个链表(如图2-a中的虚曲线串连的链条所示),链表末尾的“∧”符号表示空地址,说明链接到此结束。
下一块地址:指示具有相同键的取值的下一块数据,它也将数据块连接起来,形成另一个链表(如图2-a中的实曲线串连的链条所示),它和虚曲线链表的串链的方向刚好相反,这样两个链表组成了一个双向链接,链表的头部可以通过键在哈希表中快速索引到。
数据长度:指示数据内容的长度。
数据内容:存储真正的数据。
在缓存池中数据的初始化流程如下:
将哈希表和缓存池全部清0,将游标指向缓存池的头部,*A为全部的缓存池,*B为空,缓存池中没有存储任何数据。
在缓存池中数据查询的主要流程如下:
通过键的取值在哈希表中找到数据块在缓存池中的存储的第一个位置,通过数据块的下一块地址,可以遍历数据块链表。
在缓存池中数据存储的主要流程如下:
首先计算新数据块将要占用的缓存池中的大小,即计算出新数据块的长度,包括键、数据长度、数据内容、上一块地址、下一块地址的大小的总和。然后,获取缓存池中第一剩余空间(即前述的*A)的容量,判断*A的容量和新数据块的长度的大小关系,若*A的容量大于或等于新数据块的长度,将新新数据块的组成部分从游标指向的地址空间开始依次存储到*A,并将游标移动到新数据块的尾部。如果*A的容量不足存储新数据块,则将游标移动到缓存池中存储时间最长的数据块,并尽可能少地淘汰游标之后的数据块,从而清理出来地址空间构成*B,保证清理出来的第二剩余空间*B足够于存储新数据块,其中,淘汰数据块的方法是将其从其对应的双向链表尾部删除。在存储了新数据块之后,将游标下移至新数据块的尾部。
通过前述描述可知,在通过键查询数据块时,通过哈希表找到原来相同键的取值的第一个数据块(即双向链接的表头),然后将新数据块***到双向链接的头部,并修改哈希表,使之指向新数据块,这样新数据块便成为相同键值的第一个数据块。故本发明实施例可以有效的解决各种变长数据的缓存问题。通过有效的内存管理,提升空间的利用率和老数据淘汰的效率。适合各种变长数据的存储需求,具有极强的谱适性。和现有的哈希缓存方案比较,节约存储空间、高效查询和存储、能够存储多种类型的数据,因此合适互联网的快速变化的需求。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
为便于更好的实施本发明实施例的上述方案,下面还提供用于实施上述方案的相关装置。
请参阅图3-a所示,本发明实施例提供的一种数据缓存装置300,可以包括:第一剩余空间获取模块301、判断模块302、数据块存储模块303、游标移动模块304,其中,
第一剩余空间获取模块301,用于当数据块存入缓存池时,获取所述缓存池中游标指向的第一剩余空间的容量;
判断模块302,用于判断所述游标指向的第一剩余空间的容量与所述数据块的长度的大小关系;
数据块存储模块303,用于当所述游标指向的第一剩余空间的容量大于或等于所述数据块的长度时,从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第一剩余空间中;
游标移动模块304,用于当所述数据块存储到所述第一剩余空间之后,将所述游标移动到所述数据块的尾部,移动后的所述游标指向所述缓存池中存储所述数据块之后的第一剩余空间。
请参阅如图3-b所示,在本发明的一些实施例中,相对于如图3-a所示的数据缓存装置300,数据缓存装置300还可以包括:数据块淘汰模块305,其中,
所述游标移动模块304,还用于当所述游标指向的第一剩余空间的容量小于所述数据块的长度时,将所述游标移动到所述缓存池中已存储的第一数据块;
所述数据块淘汰模块305,用于当所述游标指向的第一剩余空间的容量小于所述数据块的长度时,将所述第一数据块从所述缓存池中淘汰掉,所述第一数据块被淘汰掉后在所述缓存池中腾出的地址空间为所述游标指向的第二剩余空间;
所述数据块存储模块303,还用于从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第二剩余空间中;
所述游标移动模块304,还用于当所述数据块存储到所述第二剩余空间之后,将所述游标移动到所述数据块的尾部,移动后的所述游标指向所述缓存池中存储所述数据块之后的第二剩余空间。
请参阅如图3-c所示,在本发明的一些实施例中,相对于如图3-b所示的数据缓存装置300,数据缓存装置300还可以包括:空间合并模块306,其中,
所述判断模块302,用于所述数据块淘汰模块将所述第一数据块从所述缓存池中淘汰掉之后,判断所述游标指向的第二剩余空间的容量与所述数据块的长度的大小关系;若所述游标指向的第二剩余空间的容量大于或等于所述数据块的长度,触发执行所述数据块存储模块;
所述数据块淘汰模块305,还用于当所述游标指向的第二剩余空间的容量小于所述数据块的长度时,将所述缓存池中已存储的第二数据块从所述缓存池中淘汰掉;
所述空间合并模块306,还用于当所述游标指向的第二剩余空间的容量小于所述数据块的长度时,将所述第二数据块被淘汰掉后在所述缓存池中腾出的地址空间合并入所述第二剩余空间,触发执行所述数据块存储模块,所述第二数据块为所述缓存池中位于所述游标之后且与所述第一数据块相邻的数据块。
在本发明的一些实施例中,所述数据块包括:键、上一块地址、下一块地址、数据长度、数据内容。
在这种情况下,第一剩余空间获取模块301,具体用于根据所述数据块的键查询哈希表,从所述缓存池中查找到第四数据块,所述第四数据块为与所述数据块的键取值相同的数据块,所述缓存池中从所述第四数据块的尾部开始直到所述缓存池的尾部为所述第一剩余空间。
具体的,所述第四数据块包括:键、上一块地址、下一块地址、数据长度、数据内容。请参阅如图3-d所示,在本发明的一些实施例中,相对于如图3-a所示的数据缓存装置300,数据缓存装置300还可以包括:数据块修改模块307,用于所述数据块存储模块从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第一剩余空间中之后,将所述数据块的上一块地址设置为预置的符号;将所述数据块的下一块地址设置为所述第四数据块的存储地址;将所述第四数据块的上一块地址设置为所述数据块的存储地址。
另外,所述缓存池中已存储的第二数据块包括:键、上一块地址、下一块地址、数据长度、数据内容,所述第二数据块为所述缓存池中位于所述游标之后且与所述第一数据块相邻的数据块。数据块修改模块307,用于所述数据块存储模块将所述第一数据块从所述缓存池中淘汰掉之后,将所述第二数据块的上一块地址设置为预置的符号。
请参阅如图3-e所示,在本发明的一些实施例中,相对于如图3-a所示的数据缓存装置300,数据缓存装置300还可以包括:哈希表修改模块308,用于所述数据块存储模块从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第一剩余空间中之后,对所述哈希表进行修改,以使根据所述键查询修改后的哈希表时查找到所述数据块。
在本发明实施例中,当有数据块需要存入缓存池时,第一剩余空间获取模块获取缓存池中游标指向的第一剩余空间的容量,然后判断模块判断该第一剩余空间是否足够存储该数据块,当游标指向的第一剩余空间的容量大于或等于数据块的长度时,数据块存储模块从游标指向的地址空间开始将数据块的组成部分依次存储到第一剩余空间中,并且在数据存储到第一剩余空间之后,游标移动模块将游标移动到该数据块的尾部,则移动后的游标指向缓存池中存储该数据块之后的第一剩余空间。由于数据块在缓存池中存储在游标指向的第一剩余空间中,并且游标也会及时的移动到缓存池中存储的该数据块的尾部,故数据块在缓存池中的存储是按照游标指向的第一剩余空间来进行存储的,游标总是在存储完数据块后就移动到刚存储的数据块的尾部,故对于数据块的长度不固定时,也可以通过游标指示出缓存池中仍可用于存储数据的剩余空间,从而将数据块存储到缓存池中的剩余空间中,故本发明实施例可适用于存储长度不固定的数据,实现缓存池中数据块的紧凑存储,避免存储空间的浪费。
以下主要以本发明实施例的数据缓存方法应用于终端中来举例说明,该终端可以包括智能手机、平板电脑、电子书阅读器、动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer III,MP3)播放器、动态影像专家压缩标准音频层面4(Moving Picture Experts Group Audio LayerIV,MP4)播放器、膝上型便携计算机和台式计算机等等。
请参考图4,其示出了本发明实施例所涉及的终端的结构示意图,具体来讲:
终端可以包括射频(Radio Frequency,RF)电路20、包括有一个或一个以上计算机可读存储介质的存储器21、输入单元22、显示单元23、传感器24、音频电路25、无线保真(wireless fidelity,WiFi)模块26、包括有一个或者一个以上处理核心的处理器27、以及电源28等部件。本领域技术人员可以理解,图4中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
RF电路20可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器27处理;另外,将涉及上行的数据发送给基站。通常,RF电路20包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(SIM)卡、收发信机、耦合器、低噪声放大器(Low Noise Amplifier,LNA)、双工器等。此外,RF电路20还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯***(Global System ofMobile communication,GSM)、通用分组无线服务(General Packet RadioService,GPRS)、码分多址(Code Division Multiple Access,CDMA)、宽带码分多址(Wideband Code Division Multiple Access,WCDMA)、长期演进(LongTerm Evolution,LTE)、电子邮件、短消息服务(Short Messaging Service,SMS)等。
存储器21可用于存储软件程序以及模块,处理器27通过运行存储在存储器21的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器21可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器21可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器21还可以包括存储器控制器,以提供处理器27和输入单元22对存储器21的访问。存储器21的种类很多,按其用途可分为主存储器和辅助存储器,主存储器又称内存储器。
输入单元22可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,在一个具体的实施例中,输入单元22可包括触敏表面221以及其他输入设备222。触敏表面221,也称为触摸显示屏或者触控板,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触敏表面221上或在触敏表面221附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触敏表面221可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器27,并能接收处理器27发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触敏表面221。除了触敏表面221,输入单元22还可以包括其他输入设备222。具体地,其他输入设备222可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元23可用于显示由用户输入的信息或提供给用户的信息以及终端的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元23可包括显示面板231,可选的,可以采用液晶显示器(Liquid Crystal Display,LCD)、有机发光二极管(OrganicLight-Emitting Diode,OLED)等形式来配置显示面板231。进一步的,触敏表面221可覆盖显示面板231,当触敏表面221检测到在其上或附近的触摸操作后,传送给处理器27以确定触摸事件的类型,随后处理器27根据触摸事件的类型在显示面板231上提供相应的视觉输出。虽然在图4中,触敏表面221与显示面板231是作为两个独立的部件来实现输入和输入功能,但是在某些实施例中,可以将触敏表面221与显示面板231集成而实现输入和输出功能。
终端还可包括至少一种传感器24,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板231的亮度,接近传感器可在终端移动到耳边时,关闭显示面板231和/或背光。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于终端还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路25、扬声器251,传声器252可提供用户与终端之间的音频接口。音频电路25可将接收到的音频数据转换后的电信号,传输到扬声器251,由扬声器251转换为声音信号输出;另一方面,传声器252将收集的声音信号转换为电信号,由音频电路25接收后转换为音频数据,再将音频数据输出处理器27处理后,经RF电路20以发送给比如另一终端,或者将音频数据输出至存储器21以便进一步处理。音频电路25还可能包括耳塞插孔,以提供外设耳机与终端的通信。
WiFi属于短距离无线传输技术,终端通过WiFi模块26可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图4示出了WiFi模块26,但是可以理解的是,其并不属于终端的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器27是终端的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器21内的软件程序和/或模块,以及调用存储在存储器21内的数据,执行终端的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器27可包括一个或多个处理核心;优选的,处理器27可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作***、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器27中。
终端还包括给各个部件供电的电源28(比如电池),优选的,电源可以通过电源管理***与处理器27逻辑相连,从而通过电源管理***实现管理充电、放电、以及功耗管理等功能。电源28还可以包括一个或一个以上的直流或交流电源、再充电***、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管未示出,终端还可以包括摄像头、蓝牙模块等,在此不再赘述。具体在本实施例中,终端的显示单元是触摸屏显示器,终端的存储器21与上述数据库类似,可以存储采样时间段、采样时间间隔、帧率统计值。
且本实施例的终端中一个或者一个以上程序存储于存储器21中,且经配置以由一个或者一个以上处理器27执行上述一个或者一个以上程序所包含的以下操作指令:
当数据块存入缓存池时,获取所述缓存池中游标指向的第一剩余空间的容量;
判断所述游标指向的第一剩余空间的容量与所述数据块的长度的大小关系;
若所述游标指向的第一剩余空间的容量大于或等于所述数据块的长度,从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第一剩余空间中;
当所述数据块存储到所述第一剩余空间之后,将所述游标移动到所述数据块的尾部,移动后的所述游标指向所述缓存池中存储所述数据块之后的第一剩余空间。
具体的,处理器27还可以用于执行以下操作指令:
若所述游标指向的第一剩余空间的容量小于所述数据块的长度,将所述游标移动到所述缓存池中已存储的第一数据块,并将所述第一数据块从所述缓存池中淘汰掉,所述第一数据块被淘汰掉后在所述缓存池中腾出的地址空间为所述游标指向的第二剩余空间;
从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第二剩余空间中;
当所述数据块存储到所述第二剩余空间之后,将所述游标移动到所述数据块的尾部,移动后的所述游标指向所述缓存池中存储所述数据块之后的第二剩余空间。
具体的,处理器27还可以用于执行以下操作指令:将所述第一数据块从所述缓存池中淘汰掉之后,判断所述游标指向的第二剩余空间的容量与所述数据块的长度的大小关系;若所述游标指向的第二剩余空间的容量大于或等于所述数据块的长度,触发执行从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第二剩余空间中;若所述游标指向的第二剩余空间的容量小于所述数据块的长度,将所述缓存池中已存储的第二数据块从所述缓存池中淘汰掉,并将所述第二数据块被淘汰掉后在所述缓存池中腾出的地址空间合并入所述第二剩余空间,触发执行从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第二剩余空间中,所述第二数据块为所述缓存池中位于所述游标之后且与所述第一数据块相邻的数据块。
具体的,处理器27还可以用于执行以下操作指令:所述将所述存储时间最长的数据块从所述缓存池中淘汰掉之后,判断所述游标指向的第二剩余空间的容量与所述数据块的长度的大小关系;若所述游标指向的第二剩余空间的容量大于或等于所述数据块的长度,触发执行从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第二剩余空间中;若所述游标指向的第二剩余空间的容量小于所述数据块的长度,当所述缓存池中从所述游标指向的地址空间直到所述缓存池的尾部都不存在已存储的数据块时,将所述第一剩余空间合并入所述第二剩余空间,并触发执行从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第二剩余空间中。
具体的,所述数据块包括:键、上一块地址、下一块地址、数据长度、数据内容。
具体的,所述获取所述缓存池中游标指向的第一剩余空间的容量,包括:
根据所述数据块的键查询哈希表,从所述缓存池中查找到第四数据块,所述第四数据块为与所述数据块的键取值相同的数据块,所述缓存池中从所述第四数据块的尾部开始直到所述缓存池的尾部为所述第一剩余空间。
具体的,所述第四数据块包括:键、上一块地址、下一块地址、数据长度、数据内容;所述从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第一剩余空间中之后,将所述数据块的上一块地址设置为预置的符号;将所述数据块的下一块地址设置为所述第四数据块的存储地址;将所述第四数据块的上一块地址设置为所述数据块的存储地址。
具体的,处理器27还可以用于执行以下操作指令:从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第一剩余空间中之后,对所述哈希表进行修改,以使根据所述键查询修改后的哈希表时查找到所述数据块。
具体的,所述缓存池中已存储的第二数据块包括:键、上一块地址、下一块地址、数据长度、数据内容,所述第二数据块为所述缓存池中位于所述游标之后且与所述第一数据块相邻的数据块;处理器27还可以用于执行以下操作指令:将所述第一数据块从所述缓存池中淘汰掉之后,将所述第二数据块的上一块地址设置为预置的符号。
通过以上对本发明实施例的描述可知,当有数据块需要存入缓存池时,获取缓存池中游标指向的第一剩余空间的容量,然后判断该第一剩余空间是否足够存储该数据块,当游标指向的第一剩余空间的容量大于或等于数据块的长度时,从游标指向的地址空间开始将数据块的组成部分依次存储到第一剩余空间中,并且在数据存储到第一剩余空间之后,将游标移动到该数据块的尾部,则移动后的游标指向缓存池中存储该数据块之后的第一剩余空间。由于数据块在缓存池中存储在游标指向的第一剩余空间中,并且游标也会及时的移动到缓存池中存储的该数据块的尾部,故数据块在缓存池中的存储是按照游标指向的第一剩余空间来进行存储的,游标总是在存储完数据块后就移动到刚存储的数据块的尾部,故对于数据块的长度不固定时,也可以通过游标指示出缓存池中仍可用于存储数据的剩余空间,从而将数据块存储到缓存池中的剩余空间中,故本发明实施例可适用于存储长度不固定的数据,实现缓存池中数据块的紧凑存储,避免存储空间的浪费。
另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
综上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照上述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对上述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (18)

1.一种数据缓存方法,其特征在于,包括:
当数据块存入缓存池时,获取所述缓存池中游标指向的第一剩余空间的容量;
判断所述游标指向的第一剩余空间的容量与所述数据块的长度的大小关系;
若所述游标指向的第一剩余空间的容量大于或等于所述数据块的长度,从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第一剩余空间中;
当所述数据块存储到所述第一剩余空间之后,将所述游标移动到所述数据块的尾部,移动后的所述游标指向所述缓存池中存储所述数据块之后的第一剩余空间。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述游标指向的第一剩余空间的容量小于所述数据块的长度,将所述游标移动到所述缓存池中已存储的第一数据块,并将所述第一数据块从所述缓存池中淘汰掉,所述第一数据块被淘汰掉后在所述缓存池中腾出的地址空间为所述游标指向的第二剩余空间;
从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第二剩余空间中;
当所述数据块存储到所述第二剩余空间之后,将所述游标移动到所述数据块的尾部,移动后的所述游标指向所述缓存池中存储所述数据块之后的第二剩余空间。
3.根据权利要求2所述的方法,其特征在于,所述将所述第一数据块从所述缓存池中淘汰掉之后,还包括:
判断所述游标指向的第二剩余空间的容量与所述数据块的长度的大小关系;
若所述游标指向的第二剩余空间的容量大于或等于所述数据块的长度,触发执行从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第二剩余空间中;
若所述游标指向的第二剩余空间的容量小于所述数据块的长度,将所述缓存池中已存储的第二数据块从所述缓存池中淘汰掉,并将所述第二数据块被淘汰掉后在所述缓存池中腾出的地址空间合并入所述第二剩余空间,触发执行从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第二剩余空间中,所述第二数据块为所述缓存池中位于所述游标之后且与所述第一数据块相邻的数据块。
4.根据权利要求2所述的方法,其特征在于,所述将所述存储时间最长的数据块从所述缓存池中淘汰掉之后,还包括:
判断所述游标指向的第二剩余空间的容量与所述数据块的长度的大小关系;
若所述游标指向的第二剩余空间的容量大于或等于所述数据块的长度,触发执行从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第二剩余空间中;
若所述游标指向的第二剩余空间的容量小于所述数据块的长度,当所述缓存池中从所述游标指向的地址空间直到所述缓存池的尾部都不存在已存储的数据块时,将所述第一剩余空间合并入所述第二剩余空间,并触发执行从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第二剩余空间中。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述数据块包括:键、上一块地址、下一块地址、数据长度、数据内容。
6.根据权利要求5所述的方法,其特征在于,所述获取所述缓存池中游标指向的第一剩余空间的容量,包括:
根据所述数据块的键查询哈希表,从所述缓存池中查找到第四数据块,所述第四数据块为与所述数据块的键取值相同的数据块,所述缓存池中从所述第四数据块的尾部开始直到所述缓存池的尾部为所述第一剩余空间。
7.根据权利要求6所述的方法,其特征在于,所述第四数据块包括:键、上一块地址、下一块地址、数据长度、数据内容;
所述从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第一剩余空间中之后,还包括:
将所述数据块的上一块地址设置为预置的符号;
将所述数据块的下一块地址设置为所述第四数据块的存储地址;
将所述第四数据块的上一块地址设置为所述数据块的存储地址。
8.根据权利要求6所述的方法,其特征在于,所述从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第一剩余空间中之后,还包括:
对所述哈希表进行修改,以使根据所述键查询修改后的哈希表时查找到所述数据块。
9.根据权利要求5所述的方法,其特征在于,所述缓存池中已存储的第二数据块包括:键、上一块地址、下一块地址、数据长度、数据内容,所述第二数据块为所述缓存池中位于所述游标之后且与所述第一数据块相邻的数据块;
所述将所述第一数据块从所述缓存池中淘汰掉之后,还包括:
将所述第二数据块的上一块地址设置为预置的符号。
10.一种数据缓存装置,其特征在于,包括:
第一剩余空间获取模块,用于当数据块存入缓存池时,获取所述缓存池中游标指向的第一剩余空间的容量;
判断模块,用于判断所述游标指向的第一剩余空间的容量与所述数据块的长度的大小关系;
数据块存储模块,用于当所述游标指向的第一剩余空间的容量大于或等于所述数据块的长度时,从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第一剩余空间中;
游标移动模块,用于当所述数据块存储到所述第一剩余空间之后,将所述游标移动到所述数据块的尾部,移动后的所述游标指向所述缓存池中存储所述数据块之后的第一剩余空间。
11.根据权利要求10所述的装置,其特征在于,所述数据缓存装置还包括:数据块淘汰模块,其中,
所述游标移动模块,还用于当所述游标指向的第一剩余空间的容量小于所述数据块的长度时,将所述游标移动到所述缓存池中已存储的第一数据块;
所述数据块淘汰模块,用于当所述游标指向的第一剩余空间的容量小于所述数据块的长度时,将所述第一数据块从所述缓存池中淘汰掉,所述第一数据块被淘汰掉后在所述缓存池中腾出的地址空间为所述游标指向的第二剩余空间;
所述数据块存储模块,还用于从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第二剩余空间中;
所述游标移动模块,还用于当所述数据块存储到所述第二剩余空间之后,将所述游标移动到所述数据块的尾部,移动后的所述游标指向所述缓存池中存储所述数据块之后的第二剩余空间。
12.根据权利要求11所述的装置,其特征在于,所述数据缓存装置还包括:空间合并模块,其中,
所述判断模块,用于所述数据块淘汰模块将所述第一数据块从所述缓存池中淘汰掉之后,判断所述游标指向的第二剩余空间的容量与所述数据块的长度的大小关系;若所述游标指向的第二剩余空间的容量大于或等于所述数据块的长度,触发执行所述数据块存储模块;
所述数据块淘汰模块,还用于当所述游标指向的第二剩余空间的容量小于所述数据块的长度时,将所述缓存池中已存储的第二数据块从所述缓存池中淘汰掉;
所述空间合并模块,还用于当所述游标指向的第二剩余空间的容量小于所述数据块的长度时,将所述第二数据块被淘汰掉后在所述缓存池中腾出的地址空间合并入所述第二剩余空间,触发执行所述数据块存储模块,所述第二数据块为所述缓存池中位于所述游标之后且与所述第一数据块相邻的数据块。
13.根据权利要求11所述的装置,其特征在于,所述数据缓存装置还包括:空间合并模块,其中,
所述判断模块,用于所述数据块淘汰模块将所述存储时间最长的数据块从所述缓存池中淘汰掉之后,判断所述游标指向的第二剩余空间的容量与所述数据块的长度的大小关系;若所述游标指向的第二剩余空间的容量大于或等于所述数据块的长度,触发执行所述数据块存储模块;
所述空间合并模块,用于当所述游标指向的第二剩余空间的容量小于所述数据块的长度、且所述缓存池中从所述游标指向的地址空间直到所述缓存池的尾部都不存在已存储的数据块时,将所述第一剩余空间合并入所述第二剩余空间,并触发执行所述数据块存储模块。
14.根据权利要求9至13中任一项所述的装置,其特征在于,所述数据块包括:键、上一块地址、下一块地址、数据长度、数据内容。
15.根据权利要求14所述的装置,其特征在于,所述第一剩余空间获取模块,具体用于根据所述数据块的键查询哈希表,从所述缓存池中查找到第四数据块,所述第四数据块为与所述数据块的键取值相同的数据块,所述缓存池中从所述第四数据块的尾部开始直到所述缓存池的尾部为所述第一剩余空间。
16.根据权利要求15所述的装置,其特征在于,所述第四数据块包括:键、上一块地址、下一块地址、数据长度、数据内容;
所述数据缓存装置还包括:数据块修改模块,用于所述数据块存储模块从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第一剩余空间中之后,将所述数据块的上一块地址设置为预置的符号;将所述数据块的下一块地址设置为所述第四数据块的存储地址;将所述第四数据块的上一块地址设置为所述数据块的存储地址。
17.根据权利要求15所述的装置,其特征在于,所述数据缓存装置还包括:哈希表修改模块,用于所述数据块存储模块从所述游标指向的地址空间开始将所述数据块的组成部分依次存储到所述第一剩余空间中之后,对所述哈希表进行修改,以使根据所述键查询修改后的哈希表时查找到所述数据块。
18.根据权利要求14所述的装置,其特征在于,所述缓存池中已存储的第二数据块包括:键、上一块地址、下一块地址、数据长度、数据内容,所述第二数据块为所述缓存池中位于所述游标之后且与所述第一数据块相邻的数据块;
所述数据缓存装置还包括:数据块修改模块,用于所述数据块存储模块将所述第一数据块从所述缓存池中淘汰掉之后,将所述第二数据块的上一块地址设置为预置的符号。
CN201410055379.6A 2014-02-18 2014-02-18 一种数据缓存方法和数据缓存装置 Active CN104850507B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410055379.6A CN104850507B (zh) 2014-02-18 2014-02-18 一种数据缓存方法和数据缓存装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410055379.6A CN104850507B (zh) 2014-02-18 2014-02-18 一种数据缓存方法和数据缓存装置

Publications (2)

Publication Number Publication Date
CN104850507A true CN104850507A (zh) 2015-08-19
CN104850507B CN104850507B (zh) 2019-03-15

Family

ID=53850160

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410055379.6A Active CN104850507B (zh) 2014-02-18 2014-02-18 一种数据缓存方法和数据缓存装置

Country Status (1)

Country Link
CN (1) CN104850507B (zh)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105847190A (zh) * 2016-03-17 2016-08-10 青岛海信电器股份有限公司 一种数据传输方法及处理器
CN106406756A (zh) * 2016-09-05 2017-02-15 华为技术有限公司 一种文件***的空间分配方法及装置
WO2017156683A1 (zh) * 2016-03-14 2017-09-21 深圳创维-Rgb电子有限公司 基于链表的应用缓存管理方法及装置
CN107766526A (zh) * 2017-10-26 2018-03-06 中国人民银行清算总中心 数据库访问方法、装置及***
CN108132759A (zh) * 2018-01-15 2018-06-08 网宿科技股份有限公司 一种文件***中管理数据的方法和装置
CN108763109A (zh) * 2018-06-13 2018-11-06 成都心吉康科技有限公司 数据存储方法、装置及其应用
US10241927B2 (en) * 2016-03-14 2019-03-26 Shenzhen Skyworth-Rgb Electronic Co., Ltd. Linked-list-based method and device for application caching management
CN109688085A (zh) * 2017-10-19 2019-04-26 中兴通讯股份有限公司 传输控制协议代理方法、存储介质及服务器
CN111159064A (zh) * 2019-12-30 2020-05-15 南京六九零二科技有限公司 一种低复杂度数据块缓存方法
CN111737295A (zh) * 2020-06-11 2020-10-02 上海达梦数据库有限公司 数据库游标查询方法、装置、设备和存储介质
CN114490459A (zh) * 2022-01-27 2022-05-13 重庆物奇微电子有限公司 数据传输方法、装置、设备、接收机和存储介质
CN114816230A (zh) * 2021-01-29 2022-07-29 深圳和而泰智能家电控制器有限公司 一种Flash数据存储方法、装置和家电设备
CN114845132A (zh) * 2022-04-29 2022-08-02 抖动科技(深圳)有限公司 基于哈希算法的低延迟直播缓存方法、装置、设备及介质
WO2022206474A1 (zh) * 2021-03-30 2022-10-06 北京字节跳动网络技术有限公司 数据获取方法, 装置, 电子设备及计算机可读存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101122885A (zh) * 2007-09-11 2008-02-13 腾讯科技(深圳)有限公司 一种数据缓存处理方法、***及数据缓存装置
CN101739301A (zh) * 2009-12-09 2010-06-16 南京联创科技集团股份有限公司 Unix环境下进程间大量数据传输的方法
CN102169460A (zh) * 2010-02-26 2011-08-31 航天信息股份有限公司 变长数据管理方法及装置
CN102325360A (zh) * 2011-07-13 2012-01-18 中国联合网络通信集团有限公司 数据帧处理方法及无线接入点
CN103425435A (zh) * 2012-05-15 2013-12-04 深圳市腾讯计算机***有限公司 磁盘存储方法及磁盘存储***
CN103488717A (zh) * 2013-09-11 2014-01-01 北京华胜天成科技股份有限公司 一种无锁数据汇聚方法及装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101122885A (zh) * 2007-09-11 2008-02-13 腾讯科技(深圳)有限公司 一种数据缓存处理方法、***及数据缓存装置
CN101739301A (zh) * 2009-12-09 2010-06-16 南京联创科技集团股份有限公司 Unix环境下进程间大量数据传输的方法
CN102169460A (zh) * 2010-02-26 2011-08-31 航天信息股份有限公司 变长数据管理方法及装置
CN102325360A (zh) * 2011-07-13 2012-01-18 中国联合网络通信集团有限公司 数据帧处理方法及无线接入点
CN103425435A (zh) * 2012-05-15 2013-12-04 深圳市腾讯计算机***有限公司 磁盘存储方法及磁盘存储***
CN103488717A (zh) * 2013-09-11 2014-01-01 北京华胜天成科技股份有限公司 一种无锁数据汇聚方法及装置

Cited By (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU2016277745B2 (en) * 2016-03-14 2021-02-11 Shenzhen Skyworth-Rgb Electronic Co., Ltd. Linked-list-based method and device for application caching management
WO2017156683A1 (zh) * 2016-03-14 2017-09-21 深圳创维-Rgb电子有限公司 基于链表的应用缓存管理方法及装置
US10241927B2 (en) * 2016-03-14 2019-03-26 Shenzhen Skyworth-Rgb Electronic Co., Ltd. Linked-list-based method and device for application caching management
CN105847190A (zh) * 2016-03-17 2016-08-10 青岛海信电器股份有限公司 一种数据传输方法及处理器
CN105847190B (zh) * 2016-03-17 2019-09-20 青岛海信电器股份有限公司 一种数据传输方法及处理器
CN106406756A (zh) * 2016-09-05 2017-02-15 华为技术有限公司 一种文件***的空间分配方法及装置
CN106406756B (zh) * 2016-09-05 2019-07-09 华为技术有限公司 一种文件***的空间分配方法及装置
CN109688085A (zh) * 2017-10-19 2019-04-26 中兴通讯股份有限公司 传输控制协议代理方法、存储介质及服务器
CN107766526A (zh) * 2017-10-26 2018-03-06 中国人民银行清算总中心 数据库访问方法、装置及***
CN107766526B (zh) * 2017-10-26 2020-04-28 中国人民银行清算总中心 数据库访问方法、装置及***
CN108132759A (zh) * 2018-01-15 2018-06-08 网宿科技股份有限公司 一种文件***中管理数据的方法和装置
CN108132759B (zh) * 2018-01-15 2021-04-16 网宿科技股份有限公司 一种文件***中管理数据的方法和装置
CN108763109A (zh) * 2018-06-13 2018-11-06 成都心吉康科技有限公司 数据存储方法、装置及其应用
CN108763109B (zh) * 2018-06-13 2022-04-26 成都心吉康科技有限公司 数据存储方法、装置及其应用
CN111159064A (zh) * 2019-12-30 2020-05-15 南京六九零二科技有限公司 一种低复杂度数据块缓存方法
CN111159064B (zh) * 2019-12-30 2023-09-01 南京六九零二科技有限公司 一种低复杂度数据块缓存方法
CN111737295A (zh) * 2020-06-11 2020-10-02 上海达梦数据库有限公司 数据库游标查询方法、装置、设备和存储介质
CN111737295B (zh) * 2020-06-11 2023-02-03 上海达梦数据库有限公司 数据库游标查询方法、装置、设备和存储介质
CN114816230A (zh) * 2021-01-29 2022-07-29 深圳和而泰智能家电控制器有限公司 一种Flash数据存储方法、装置和家电设备
WO2022206474A1 (zh) * 2021-03-30 2022-10-06 北京字节跳动网络技术有限公司 数据获取方法, 装置, 电子设备及计算机可读存储介质
CN114490459A (zh) * 2022-01-27 2022-05-13 重庆物奇微电子有限公司 数据传输方法、装置、设备、接收机和存储介质
CN114845132A (zh) * 2022-04-29 2022-08-02 抖动科技(深圳)有限公司 基于哈希算法的低延迟直播缓存方法、装置、设备及介质
CN114845132B (zh) * 2022-04-29 2023-05-12 厦门理工学院 基于哈希算法的低延迟直播缓存方法、装置、设备及介质

Also Published As

Publication number Publication date
CN104850507B (zh) 2019-03-15

Similar Documents

Publication Publication Date Title
CN104850507A (zh) 一种数据缓存方法和数据缓存装置
CN103530040B (zh) 目标元素移动方法、装置及电子设备
CN103327102A (zh) 一种推荐应用程序的方法和装置
CN103530115B (zh) 一种应用程序显示方法、装置及终端设备
CN104967679A (zh) 信息推荐***、方法及装置
CN103543913A (zh) 一种终端设备操作方法、装置和终端设备
CN104636047A (zh) 对列表中的对象进行操作的方法、装置及触屏终端
CN104618794A (zh) 播放视频的方法和装置
CN104516887A (zh) 一种网页数据搜索方法、装置和***
CN104238918A (zh) 列表视图组件滑动显示方法及装置
CN103455330A (zh) 应用程序管理方法、终端、设备及***
CN104571787A (zh) 一种消息显示方法和通信终端
CN104301315A (zh) 一种限制信息访问的方法和装置
CN104281394A (zh) 智能选词的方法和装置
CN104239343A (zh) 一种用户输入信息的处理方法和装置
CN103368828B (zh) 一种消息暂存方法及***
CN104954159A (zh) 一种网络信息统计的方法和装置
CN104519262A (zh) 获取视频数据的方法、装置及终端
CN103945241A (zh) 一种流媒体数据的统计方法、***及相关装置
CN104898936A (zh) 一种翻页方法和移动设备
CN103678502A (zh) 信息收藏方法和装置
CN104424278A (zh) 一种获取热点资讯的方法及装置
CN103327029B (zh) 一种恶意网址的检测方法和设备
CN105512150A (zh) 一种信息搜索方法及装置
CN104951637A (zh) 一种获取训练参数的方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20190730

Address after: Shenzhen Futian District City, Guangdong province 518044 Zhenxing Road, SEG Science Park 2 East Room 403

Co-patentee after: Tencent cloud computing (Beijing) limited liability company

Patentee after: Tencent Technology (Shenzhen) Co., Ltd.

Address before: Shenzhen Futian District City, Guangdong province 518000 Zhenxing Road, SEG Science Park 2 East Room 403

Patentee before: Tencent Technology (Shenzhen) Co., Ltd.