CN105243030A - 一种数据缓存方法 - Google Patents
一种数据缓存方法 Download PDFInfo
- Publication number
- CN105243030A CN105243030A CN201510701385.9A CN201510701385A CN105243030A CN 105243030 A CN105243030 A CN 105243030A CN 201510701385 A CN201510701385 A CN 201510701385A CN 105243030 A CN105243030 A CN 105243030A
- Authority
- CN
- China
- Prior art keywords
- data
- chained list
- memory
- hash
- memory 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.)
- Pending
Links
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种数据缓存方法,该方法包括:初始化内存,以建立第一链表、哈希表和第二链表;接收到访问数据时,计算所述数据的哈希值,与所述哈希表中的哈希值进行比对;若不存在比对一致的哈希值,则从所述第一链表中获取空闲存储单元的存储地址,将所述数据存储至所述空闲存储单元中,且将该空闲存储单元的存储地址顺序存储至第二链表中,并将所述数据的哈希值存储至所述哈希表中;若存在比对一致的哈希值,则停止所述访问数据向所述内存的写入操作。本发明通过设置第一链表和第二链表,以循环方式删除最早存储的数据,避免了内存抖动现象。在存储访问的数据时,仅比较数据的哈希值提高比对的效率和速度。
Description
技术领域
本发明实施例涉及数据存储技术,尤其涉及一种数据缓存方法。
背景技术
现有的计算机,为了提高数据访问速度,需要把要访问的数据写入内存中,再进行访问。内存的空间有限,因此需要定期的清理过期数据,以提供足够的内存空间。
现有技术中的缓存方法为,当接收到要访问的数据时,首先与已有内存中存储的数据进行比较,若已存在该数据,则抛弃该数据,可直接访问内存中的已有数据,若否,则将该数据写入内存中。每隔一定时间扫描内存数据,将存储时间超过设定值的过期数据删除。上述缓存使用方案,可应用于各种场景,例如应用于流量分析统计,即需要访问的数据是流量,当内存中已存在该数据时,可以对该数据进行计次统计。
上述方案,由于需要将数据与所有内存的数据进行比较,因此效率较低,且由于定期清理内存,会使得内存突然减小,当要访问的数据量大时,内存又会突然增大,因此导致内存容易抖动。
发明内容
本发明实施例提供一种数据缓存方法,以提高缓存效率,且避免内存抖动。
本发明实施例提供了一种数据缓存方法,该数据缓存方法包括:
初始化内存,以建立第一链表、哈希表和第二链表,所述第一链表的节点用于存储内存中各存储单元的存储地址,所述哈希表的节点用于存储数据的哈希值,所述第二链表的节点用于按照数据的存储顺序存储对应存储单元的存储地址;
接收到访问数据时,计算所述数据的哈希值,与所述哈希表中的哈希值进行比对;
若不存在比对一致的哈希值,则从所述第一链表中获取空闲存储单元的存储地址,将所述数据存储至所述空闲存储单元中,且将该空闲存储单元的存储地址顺序存储至第二链表中,并将所述数据的哈希值存储至所述哈希表中;
若存在比对一致的哈希值,则停止所述访问数据向所述内存的写入操作。
进一步的,所述第二链表为单链表
进一步的,在从所述第一链表中获取空闲存储单元的存储地址之前,还包括:
判断所述第一链表中是否存在空闲存储单元的存储地址,若是,则执行存储操作,若否,则获取所述第二链表的头节点;
将所述头节点中的存储地址清空,将清空的存储地址对应存储数据的哈希值,从所述哈希表中删除;
将所述数据存储至清空的存储地址对应的存储单元中,且将所述数据的哈希值存储至所述哈希表中
将所述头节点后的下一个节点更新为所述第二链表的头节点。
进一步的,初始化内存,以建立第一链表、哈希表和第二链表包括:
根据待访问数据的流量和时间有效性设置所述第一链表、哈希表和第二链表的节点数量。
本发明通过设置第一链表和第二链表,以循环方式删除最早存储的数据,使得内存的大小不会出现突然的增加或减小,因此避免了内存抖动现象。在存储访问的数据时,仅比较数据的哈希值,而无需比较所有数据,可提高比对的效率和速度。
附图说明
图1是本发明实施例一中提供的数据缓存方法流程图;
图2是本发明实施例二中提供的数据缓存方法流程图;
图3是本发明结合实施例一和实施例二提供的数据缓存方法流程图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1是本发明实施例一中提供的数据缓存方法流程图,本实施例可适用于任意数据缓存的情况,该方法可以由配置于终端的数据处理装置来执行,具体包括如下步骤:
S110、初始化内存,以建立第一链表、哈希表和第二链表,所述第一链表的节点用于存储内存中各存储单元的存储地址,所述哈希表的节点用于存储数据的哈希值,所述第二链表的节点用于按照数据的存储顺序存储对应存储单元的存储地址;
其中,该第二链表节点中存储地址的储存顺序可以为读入时间顺序,最先读入的存入该第二链表的头节点,其他节点以此类推,将访问数据的存储地址保存在第二链表中,该存储方式方便内存中的数据根据存入时间的先后进行不断更新。该第二链表可以是双链表,优选是单链表通过头尾两个指针实现对链表内访问。
为提高缓存效率,初始化内存,以建立第一链表、哈希表和第二链表还可以包括:根据待访问数据的流量和时间有效性设置所述第一链表、哈希表和第二链表的节点数量。
在初始化内存时,可以根据有效时间内待访问数据的大概流量设置该第一链表、哈希表和第二链表的节点数量。实现在满足终端对缓存容量需求的同时,尽可能的降低缓存容量,缩短访问数据与内存数据的匹配时间,从而提高缓存效率。又因为滑动窗口内数据的流量更为方便统计,所以本实施例更适用于滑动窗口的数据缓存情况。
S120、接收到访问数据时,计算所述数据的哈希值,与所述哈希表中的哈希值进行比对;
S130、若不存在比对一致的哈希值,则从所述第一链表中获取空闲存储单元的存储地址,将所述数据存储至所述空闲存储单元中,且将该空闲存储单元的存储地址顺序存储至第二链表中,并将所述数据的哈希值存储至所述哈希表中;
其中,第一链表中空闲存储单元的标记可以是:在第一链表存储单元的存储地址前加空闲标志位,当该标志位为0时,表示所述存储地址所指示的存储单元中的数据为空,否则表示所述存储地址所指示的存储单元中已存入数据。
S140、若存在比对一致的哈希值,则停止所述访问数据向所述内存的写入操作。
若存在比对一致的哈希值,说明存储单元中已经存储有该数据了,在停止所述访问数据向所述内存的写入操作之后,还可以包括:抛弃该访问数据,并对该比对一致的哈希值进行计次统计,然后继续读取下一访问数据。
在读取下一访问数据之前,还可以包括一些其他操作,例如可以记录所丢掉的访问数据的时间,或者对统计的数量存储并显示,等相关操作,从而方便系统对缓存中数据进行控制操作。
该数据缓存方法的工作原理:根据访问数据的流量和实效性确定链表节点数量,并建立第一链表、哈希表和第二链表,并对其初始化。当接收到访问数据时,首先计算所述数据的哈希值,并将该值与哈希表中的哈希值进行比对。如果比对不一致,则从所述第一链表中获取空闲存储单元的存储地址,将所述数据存储至所述空闲存储单元中,且将该空闲存储单元的存储地址按照读入顺序存储至第二链表中,并将所述数据的哈希值存储至所述哈希表中,同时在第一链表中标记该存储单元为非空闲状态。如果比对一致,则停止所述访问数据向所述内存的写入操作,并且对该比对一致的哈希值进行计次统计。然后将该访问数据抛弃,继续读取下一访问数据。
本发明通过设置第一链表和第二链表,以循环方式删除最早存储的数据,使得内存的大小不会出现突然的增加或减小,因此避免了内存抖动现象。在存储访问的数据时,仅比较数据的哈希值,而无需比较所有数据,可提高比对的效率和速度。
实施例二
图2是本发明实施例二中提供的数据缓存方法流程图,本实施例以前述实施例为基础,进一步提供了一种数据缓存的具体实现方式,即数据缓存过程中的步骤130具体包括:
S131、判断所述第一链表中是否存在空闲存储单元的存储地址,若是,则执行存储操作,若否,则获取所述第二链表的头节点;
其中,所述第二链表的头节点存放有读入时间相对最早的存储数据所在的内存地址。
S132、将所述头节点中的存储地址清空,将清空的存储地址对应存储数据的哈希值,从所述哈希表中删除;
S133、将所述数据存储至清空的存储地址对应的存储单元中,且将所述数据的哈希值存储至所述哈希表中;
S134、将所述头节点后的下一个节点更新为所述第二链表的头节点。
该数据缓存方法的工作原理:以前述实施例为基础,当第一链表中不存在空闲存储单元的存储地址时,将第二链表头节点中的存储地址清空,将清空的存储地址对应存储数据的哈希值,从该哈希表中删除。将所述数据存储至清空的存储地址对应的存储单元中,并将该数据的哈希值存储至该哈希表中。然后将第二链表头节点后的下一个节点更新为该第二链表的头节点。上述过程即当存储单元已满时,将存储时间最早的数据清除。
本实施例对实施例一进一步补充,当第一链表中不存在空闲存储单元的存储地址时,第二链表按读入时间顺序循环删除存储时间最长的数据,所以该缓存不需要定期对过期数据删除,从而避免了内存抖动现象的发生。
图3是本发明结合实施例一和实施例二提供的数据缓存方法流程图,该方法为:程序开始,首先读取配置文件,建立并初始化第一链表、第二链表和哈希表。然后,接收访问数据,并计算该数据的哈希值。将该哈希值与哈希表中的哈希值进行比对,并判断该哈希值是否存在于哈希表中。
如果该哈希值存在于哈希表中,表示该访问数据内容已经存储于内存中,则将该数据抛弃,并继续读取下一访问数据。在继续读取下一访问数据前,可以对该比对一致的哈希值进行计次统计,或者对统计的数量存储并显示,等其他操作,从而方便系统对缓存中数据进行控制操作。
如果该哈希值不存在于哈希表中,则从第一链表中获取空闲存储单元地址。如果第一链表中存在空闲存储单元,则从所述第一链表中获取空闲存储单元的存储地址,将该数据存储至空闲存储单元中,且将该空闲存储单元的存储地址顺序存储至第二链表中,并将所述数据的哈希值存储至所述哈希表中。如果第一链表中不存在空闲存储单元,则首先清空第二链表的头节点中的存储地址,并将清空的存储地址对应存储数据的哈希值从所述哈希表中删除。然后,将访问数据存储至清空的存储地址对应的存储单元中,且将该数据的哈希值存储至所述哈希表中。最后,该头节点后的下一个节点更新为所述第二链表的头节点。其中,头节点存放有读入时间相对最早的存储数据所在的内存地址。这些操作之后,还可以对该存储数据进行一些其他操作,例如可以记录该存储数据的存储时间、存储位置等,方便系统对缓存中数据进行控制操作。其他操作执行完毕后,继续读取下一访问数据。
本发明通过设置第一链表和第二链表,以循环方式删除最早存储的数据,使得内存的大小不会出现突然的增加或减小,因此避免了内存抖动现象。在存储访问的数据时,仅比较数据的哈希值,而无需比较所有数据,可提高比对的效率和速度。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (4)
1.一种数据缓存方法,其特征在于,包括:
初始化内存,以建立第一链表、哈希表和第二链表,所述第一链表的节点用于存储内存中各存储单元的存储地址,所述哈希表的节点用于存储数据的哈希值,所述第二链表的节点用于按照数据的存储顺序存储对应存储单元的存储地址;
接收到访问数据时,计算所述数据的哈希值,与所述哈希表中的哈希值进行比对;
若不存在比对一致的哈希值,则从所述第一链表中获取空闲存储单元的存储地址,将所述数据存储至所述空闲存储单元中,且将该空闲存储单元的存储地址顺序存储至第二链表中,并将所述数据的哈希值存储至所述哈希表中;
若存在比对一致的哈希值,则停止所述访问数据向所述内存的写入操作。
2.根据权利要求1所述的方法,其特征在于,所述第二链表为单链表。
3.根据权利要求1所述的方法,其特征在于,在从所述第一链表中获取空闲存储单元的存储地址之前,还包括:
判断所述第一链表中是否存在空闲存储单元的存储地址,若是,则执行存储操作,若否,则获取所述第二链表的头节点;
将所述头节点中的存储地址清空,将清空的存储地址对应存储数据的哈希值,从所述哈希表中删除;
将所述数据存储至清空的存储地址对应的存储单元中,且将所述数据的哈希值存储至所述哈希表中;
将所述头节点后的下一个节点更新为所述第二链表的头节点。
4.根据权利要求1所述的方法,其特征在于,初始化内存,以建立第一链表、哈希表和第二链表包括:
根据待访问数据的流量和时间有效性设置所述第一链表、哈希表和第二链表的节点数量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510701385.9A CN105243030A (zh) | 2015-10-26 | 2015-10-26 | 一种数据缓存方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510701385.9A CN105243030A (zh) | 2015-10-26 | 2015-10-26 | 一种数据缓存方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105243030A true CN105243030A (zh) | 2016-01-13 |
Family
ID=55040683
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510701385.9A Pending CN105243030A (zh) | 2015-10-26 | 2015-10-26 | 一种数据缓存方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105243030A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106371765A (zh) * | 2016-08-29 | 2017-02-01 | 成都科鸿达科技有限公司 | 一种高效大规模系统的ltl模型检测去内存抖动的方法 |
CN107579916A (zh) * | 2016-07-04 | 2018-01-12 | 新华三技术有限公司 | 转发表项访问方法及装置 |
CN111200804A (zh) * | 2018-11-19 | 2020-05-26 | 福建天泉教育科技有限公司 | 基于蓝牙传输的数据同步方法及其系统 |
CN111930307A (zh) * | 2020-07-30 | 2020-11-13 | 北京浪潮数据技术有限公司 | 一种数据读取方法、装置、设备及计算机可读存储介质 |
CN112860592A (zh) * | 2021-01-29 | 2021-05-28 | 广州极飞科技股份有限公司 | 基于链表的数据缓存方法、装置、电子设备和存储介质 |
CN113254364A (zh) * | 2021-05-24 | 2021-08-13 | 山东创恒科技发展有限公司 | 一种嵌入式系统用信息存储装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1940922A (zh) * | 2005-09-30 | 2007-04-04 | 腾讯科技(深圳)有限公司 | 一种提高搜索信息速度的方法及系统 |
CN102567107A (zh) * | 2011-10-31 | 2012-07-11 | 广东电网公司电力科学研究院 | 高并行的实时内存资源管理调度方法 |
CN103473266A (zh) * | 2013-08-09 | 2013-12-25 | 记忆科技(深圳)有限公司 | 固态硬盘及其删除重复数据的方法 |
CN104049918A (zh) * | 2014-07-03 | 2014-09-17 | 浪潮集团有限公司 | 一种双控存储服务器的缓存管理方法 |
CN104216666A (zh) * | 2014-09-03 | 2014-12-17 | 浪潮(北京)电子信息产业有限公司 | 一种管理磁盘数据写入的方法及装置 |
-
2015
- 2015-10-26 CN CN201510701385.9A patent/CN105243030A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1940922A (zh) * | 2005-09-30 | 2007-04-04 | 腾讯科技(深圳)有限公司 | 一种提高搜索信息速度的方法及系统 |
CN102567107A (zh) * | 2011-10-31 | 2012-07-11 | 广东电网公司电力科学研究院 | 高并行的实时内存资源管理调度方法 |
CN103473266A (zh) * | 2013-08-09 | 2013-12-25 | 记忆科技(深圳)有限公司 | 固态硬盘及其删除重复数据的方法 |
CN104049918A (zh) * | 2014-07-03 | 2014-09-17 | 浪潮集团有限公司 | 一种双控存储服务器的缓存管理方法 |
CN104216666A (zh) * | 2014-09-03 | 2014-12-17 | 浪潮(北京)电子信息产业有限公司 | 一种管理磁盘数据写入的方法及装置 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107579916A (zh) * | 2016-07-04 | 2018-01-12 | 新华三技术有限公司 | 转发表项访问方法及装置 |
US11038797B2 (en) | 2016-07-04 | 2021-06-15 | New H3C Technologies Co., Ltd. | Forwarding table entry access |
CN106371765A (zh) * | 2016-08-29 | 2017-02-01 | 成都科鸿达科技有限公司 | 一种高效大规模系统的ltl模型检测去内存抖动的方法 |
CN106371765B (zh) * | 2016-08-29 | 2020-09-18 | 成都科鸿达科技有限公司 | 一种高效大规模系统的ltl模型检测去内存抖动的方法 |
CN111200804A (zh) * | 2018-11-19 | 2020-05-26 | 福建天泉教育科技有限公司 | 基于蓝牙传输的数据同步方法及其系统 |
CN111200804B (zh) * | 2018-11-19 | 2022-10-21 | 福建天泉教育科技有限公司 | 基于蓝牙传输的数据同步方法及其系统 |
CN111930307A (zh) * | 2020-07-30 | 2020-11-13 | 北京浪潮数据技术有限公司 | 一种数据读取方法、装置、设备及计算机可读存储介质 |
CN111930307B (zh) * | 2020-07-30 | 2022-06-17 | 北京浪潮数据技术有限公司 | 一种数据读取方法、装置、设备及计算机可读存储介质 |
CN112860592A (zh) * | 2021-01-29 | 2021-05-28 | 广州极飞科技股份有限公司 | 基于链表的数据缓存方法、装置、电子设备和存储介质 |
CN112860592B (zh) * | 2021-01-29 | 2023-07-18 | 广州极飞科技股份有限公司 | 基于链表的数据缓存方法、装置、电子设备和存储介质 |
CN113254364A (zh) * | 2021-05-24 | 2021-08-13 | 山东创恒科技发展有限公司 | 一种嵌入式系统用信息存储装置 |
CN113254364B (zh) * | 2021-05-24 | 2022-07-19 | 山东创恒科技发展有限公司 | 一种嵌入式系统用信息存储装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105243030A (zh) | 一种数据缓存方法 | |
CN107066393B (zh) | 提高地址映射表中映射信息密度的方法 | |
US9329995B2 (en) | Memory device and operating method thereof | |
CN105574104B (zh) | 一种基于ObjectStore的LogStructure存储系统及其数据写入方法 | |
US8307149B2 (en) | Nonvolatile memory device including a logical-to-physical logig-to-physical address conversion table, a temporary block and a temporary table | |
US8510500B2 (en) | Device driver including a flash memory file system and method thereof and a flash memory device and method thereof | |
CN107463447B (zh) | 一种基于远程直接非易失内存访问的b+树管理方法 | |
CN107391398B (zh) | 一种闪存缓存区的管理方法及系统 | |
CN109085997A (zh) | 用于非易失性存储器的存储器高效持续键值储存 | |
US9336146B2 (en) | Accelerating cache state transfer on a directory-based multicore architecture | |
EP3121703A1 (en) | Data caching method, cache and computer system | |
CN104503703B (zh) | 缓存的处理方法和装置 | |
CN105339910B (zh) | 在混合驱动器中的虚拟nand容量扩展 | |
CN110555001B (zh) | 数据处理方法、装置、终端及介质 | |
US20170364280A1 (en) | Object storage device and an operating method thereof | |
CN107784121A (zh) | 一种基于非易失内存的日志文件系统的小写优化方法 | |
CN110188108A (zh) | 数据存储方法、装置、系统、计算机设备及存储介质 | |
KR101548689B1 (ko) | 파일 시스템에서의 부분 가비지 컬렉션 방법 및 장치 | |
TWI570559B (zh) | 快閃記憶體及其存取方法 | |
CN111125049A (zh) | 基于rdma与非易失内存的分布式文件数据块读写方法及系统 | |
CN103309815A (zh) | 一种提高固态盘有效容量和寿命的方法和系统 | |
CN107870868A (zh) | 存储装置和存储系统 | |
US20170123975A1 (en) | Centralized distributed systems and methods for managing operations | |
US8271721B2 (en) | Data writing method and data storage device | |
JP2005222534A (ja) | フラッシュメモリのデータ管理装置及び方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160113 |