一种数据缓存方法

文档序号:9489392阅读:465来源:国知局
一种数据缓存方法
【技术领域】
[0001]本发明实施例涉及数据存储技术,尤其涉及一种数据缓存方法。
【背景技术】
[0002]现有的计算机,为了提高数据访问速度,需要把要访问的数据写入内存中,再进行访问。内存的空间有限,因此需要定期的清理过期数据,以提供足够的内存空间。
[0003]现有技术中的缓存方法为,当接收到要访问的数据时,首先与已有内存中存储的数据进行比较,若已存在该数据,则抛弃该数据,可直接访问内存中的已有数据,若否,则将该数据写入内存中。每隔一定时间扫描内存数据,将存储时间超过设定值的过期数据删除。上述缓存使用方案,可应用于各种场景,例如应用于流量分析统计,即需要访问的数据是流量,当内存中已存在该数据时,可以对该数据进行计次统计。
[0004]上述方案,由于需要将数据与所有内存的数据进行比较,因此效率较低,且由于定期清理内存,会使得内存突然减小,当要访问的数据量大时,内存又会突然增大,因此导致内存容易抖动。

【发明内容】

[0005]本发明实施例提供一种数据缓存方法,以提高缓存效率,且避免内存抖动。
[0006]本发明实施例提供了一种数据缓存方法,该数据缓存方法包括:
[0007]初始化内存,以建立第一链表、哈希表和第二链表,所述第一链表的节点用于存储内存中各存储单元的存储地址,所述哈希表的节点用于存储数据的哈希值,所述第二链表的节点用于按照数据的存储顺序存储对应存储单元的存储地址;
[0008]接收到访问数据时,计算所述数据的哈希值,与所述哈希表中的哈希值进行比对;
[0009]若不存在比对一致的哈希值,则从所述第一链表中获取空闲存储单元的存储地址,将所述数据存储至所述空闲存储单元中,且将该空闲存储单元的存储地址顺序存储至第二链表中,并将所述数据的哈希值存储至所述哈希表中;
[0010]若存在比对一致的哈希值,则停止所述访问数据向所述内存的写入操作。
[0011]进一步的,所述第二链表为单链表
[0012]进一步的,在从所述第一链表中获取空闲存储单元的存储地址之前,还包括:
[0013]判断所述第一链表中是否存在空闲存储单元的存储地址,若是,则执行存储操作,若否,则获取所述第二链表的头节点;
[0014]将所述头节点中的存储地址清空,将清空的存储地址对应存储数据的哈希值,从所述哈希表中删除;
[0015]将所述数据存储至清空的存储地址对应的存储单元中,且将所述数据的哈希值存储至所述哈希表中
[0016]将所述头节点后的下一个节点更新为所述第二链表的头节点。
[0017]进一步的,初始化内存,以建立第一链表、哈希表和第二链表包括:
[0018]根据待访问数据的流量和时间有效性设置所述第一链表、哈希表和第二链表的节点数量。
[0019]本发明通过设置第一链表和第二链表,以循环方式删除最早存储的数据,使得内存的大小不会出现突然的增加或减小,因此避免了内存抖动现象。在存储访问的数据时,仅比较数据的哈希值,而无需比较所有数据,可提高比对的效率和速度。
【附图说明】
[0020]图1是本发明实施例一中提供的数据缓存方法流程图;
[0021]图2是本发明实施例二中提供的数据缓存方法流程图;
[0022]图3是本发明结合实施例一和实施例二提供的数据缓存方法流程图。
【具体实施方式】
[0023]下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
[0024]实施例一
[0025]图1是本发明实施例一中提供的数据缓存方法流程图,本实施例可适用于任意数据缓存的情况,该方法可以由配置于终端的数据处理装置来执行,具体包括如下步骤:
[0026]S110、初始化内存,以建立第一链表、哈希表和第二链表,所述第一链表的节点用于存储内存中各存储单元的存储地址,所述哈希表的节点用于存储数据的哈希值,所述第二链表的节点用于按照数据的存储顺序存储对应存储单元的存储地址;
[0027]其中,该第二链表节点中存储地址的储存顺序可以为读入时间顺序,最先读入的存入该第二链表的头节点,其他节点以此类推,将访问数据的存储地址保存在第二链表中,该存储方式方便内存中的数据根据存入时间的先后进行不断更新。该第二链表可以是双链表,优选是单链表通过头尾两个指针实现对链表内访问。
[0028]为提高缓存效率,初始化内存,以建立第一链表、哈希表和第二链表还可以包括:根据待访问数据的流量和时间有效性设置所述第一链表、哈希表和第二链表的节点数量。
[0029]在初始化内存时,可以根据有效时间内待访问数据的大概流量设置该第一链表、哈希表和第二链表的节点数量。实现在满足终端对缓存容量需求的同时,尽可能的降低缓存容量,缩短访问数据与内存数据的匹配时间,从而提高缓存效率。又因为滑动窗口内数据的流量更为方便统计,所以本实施例更适用于滑动窗口的数据缓存情况。
[0030]S120、接收到访问数据时,计算所述数据的哈希值,与所述哈希表中的哈希值进行比对;
[0031]S130、若不存在比对一致的哈希值,则从所述第一链表中获取空闲存储单元的存储地址,将所述数据存储至所述空闲存储单元中,且将该空闲存储单元的存储地址顺序存储至第二链表中,并将所述数据的哈希值存储至所述哈希表中;
[0032]其中,第一链表中空闲存储单元的标记可以是:在第一链表存储单元的存储地址前加空闲标志位,当该标志位为0时,表示所述存储地址所指示的存储单元中的数据为空,否则表示所述存储地址所指示的存储单元中已存入数据。
[0033]S140、若存在比对一致的哈希值,则停止所述访问数据向所述内存的写入操作。
[0034]若存在比对一致的哈希值,说明存储单元中已经存储有该数据了,在停止所述访问数据向所述内存的写入操作之后,还可以包括:抛弃该访问数据,并对该比对一致的哈希值进行计次统计,然后继续读取下一访问数据。
[0035]在读取下一访问数据之前,还可以包括一些其他操作,例如可以记录所丢掉的访问数据的时间,或者对统计的数量存储并显示,等相关操作,从而方便系统对缓存中数据进行控制操作。
[0036]该数据缓存方法的工作原理:根据访问数据的流量和实效性确定链表节点数量,并建立第一链表、哈希表和第二链表,并对其初始化。当接收到访问数据时,首先计算所述数据的哈希值,并将该值与哈希表中的哈希值进行比对。如果比对不一致,则从所述第一链表中获取空闲存储单元的存储地址,将所述数据存储至所述空闲存储单元中,且将该空闲存储单元的存储地址按照读入顺序存储至第二链表中,并将所述数据的哈希值存储至所述哈希表中,同时在第一链表中标记该存储单元为非空闲
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1