一种对缓存数据的操作方法和装置的制作方法

文档序号:6379436阅读:124来源:国知局
专利名称:一种对缓存数据的操作方法和装置的制作方法
技术领域
本发明涉及数据通信技术领域,具体涉及一种对缓存数据的操作方法和装置。
背景技术
目前许多大型的互联网产品和服务,已经越来越多的使用缓存技术。网站的技术人员,通常会把用户访问的热点数据,放在内存中进行缓存。当其他用户访问相同的数据时,可以直接从内存中读取,并将读取到的数据返回给用户,以避免从数据库或者磁盘等慢速设备中查找。虽然许多缓存类的设备已经被广泛使用,但是大部分的缓存设备在存储空间不够时,都需要向操作系统重新申请一块更大空间的内存,同时释放旧的内存区域,以向这个新的内存空间中迁移或填充数据。但是这样的做法,很容易对上层应用程序带来一定的“颠簸”,即在内存扩容的时间点上,使得缓存数据全部失效,而此时所有的用户访问,都必须去数据库或者磁盘上寻找数据,从而增加了用户访问的响应时间,同时使得磁盘的访问压力瞬间过大。本发明针对现有缓存设备在缓存扩容时出现的上述问题,提出了一种解决方案,即通过分时移动数据的策略,将当前内存空间中的数据平滑地迁移至另一内存空间中。这样既能满足缓存容量扩充的需求,又可以保证在内存扩容期间,用户能够正常地访问缓存数据;同时可以在数据流量高峰时,减轻数据库或磁盘的压力,进而增加整体服务的稳定性。

发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的对缓存数据进行操作的方法和装置,本发明在每次对缓存进行扩容时,不立即释放当前内存空间,而是按照一定的时间间隔(比如每隔100毫秒),缓慢的把当前内存空间的数据迁移到另一内存空间,待全部数据迁移完成后,再释放当前内存空间。依据本发明的一个方面,提供了一种对缓存数据进行操作的方法,包括若第一内存空间中的数据已经写满,则判断所述第一内存空间是否为空,若否,则从所述第一内存空间中取出位于起始位置的数据,直至取出所述第一内存空间中的所有数据;若是,则释放所述第一内存空间;对从所述第一内存空间中取出的数据进行哈希操作,得到所述数据在第二内存空间中的存储地址,将所述数据写入到所述第二内存空间的该存储地址上。可选地,所述第二内存空间的容量大于所述第一内存空间的容量。可选地,在所述第一内存空间被写满后,为所述第一内存空间设置一标志位以标识所述第一内存空间正在扩容中。可选地,当第一内存空间中的数据已经写满时,每隔一时间间隔判断所述第一内存空间是否为空。
可选地,将数据存储到所述第二内存空间中后,将所述第一内存空间中的该数据删除。可选地,在内存空间缓存的数据迁移的过程中,若用户对缓存在内存空间中的数据进行访问,则先向所述第一内存空间发送读数据请求,读取失败时,再向所述第二内存空间发送读数据请求。根据本发明的另一方面,提供了一种对缓存数据进行操作的装置,包括判断子装置,适于当第一内存空间中的数据已经写满时,判断所述第一内存空间是否为空;读取子装置,适于在所述第一内存空间不为空时,从所述第一内存空间中取出位于起始位置的数据,直至取出所述第一内存空间中的所有数据;释放子装置,适于在所述第一内存空间为空时,释放所述第一内存空间;处理子装置,适于对从所述第一内存空间中取出的数据进行哈希操作,得到所述数据在第二内存空间中的存储地址;写入子装置,适于将从所述第一内存空间中取出的数据写入到所述第二内存空间的该存储地址上。可选地,所述第二内存空间的容量大于所述第一内存空间的容量。可选地,还包括标识子装置,适于在所述第一内存空间被写满后,为所述第一内存空间设置一标志位以标识所述第一内存空间正在扩容中。可选地,所述判断子装置当第一内存空间中的数据已经写满时,每隔一时间间隔判断所述第一内存空间是否为空。可选地,还包括删除子装置,适于在将数据存储到所述第二内存空间中后,将所述第一内存空间中的该数据删除。可选地,还包括控制子装置,适于在内存空间缓存的数据迁移的过程中,若用户对缓存在内存空间中的数据进行访问,则控制先向所述第一内存空间发送读数据请求,读取失败时,再向所述第二内存空间发送读数据请求。根据本发明的上述技术方案,可以极大的提高系统的稳定性和可靠性,在数据流量高峰时,可以保证缓存平滑的扩容,在缓存扩容的过程中,对于用户的数据访问仍然可以迅速的响应,极大的提高缓存数据访问命中率。由此解决了现有技术存在的上述问题,取得了对于缓存数据变化较为敏感的业务系统,系统的峰值负载下降30% _50%,用户请求的响应平均速度提高2-3秒的有益效果。同时本发明的上述技术方案还可以根据具体的应用需要灵活配置,比如,可以根据业务系统的不同,选择缓存扩容的大小,以及每次迁移的间隔时间,同时当出现大量过期数据时,也可以逆向平滑地缩小缓存空间。上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式



通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中图1示出了根据本发明一个实施例的一种对缓存数据进行操作的方法流程图;图2示出了根据本发明一个实施例的将第一内存空间的数据迁移至扩容的第一内存空间的不意图;图3示出了根据本发明一个实施例的遍历第一内存空间中每一个地址的示意图;以及图4示出了根据本发明另一个实施例的一种对缓存数据进行操作的方法流程图。
具体实施例方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。根据本发明的一方面,提出一种对缓存数据进行操作的方法,如图1所示,该方法包括以下步骤步骤SI,若第一内存空间中的数据已经写满,则判断所述第一内存空间是否为空,若否,则从所述第一内存空间中取出位于起始位置的数据,直至取出所述第一内存空间中的所有数据;若是,则释放所述第一内存空间;步骤S2,对从所述第一内存空间中取出的数据进行哈希操作,得到所述数据在第二内存空间中的存储地址,将所述数据写入到所述第二内存空间的该存储地址上。其中,所述第二内存空间的容量大于所述第一内存空间的容量。可选地,在所述第一内存空间被写满后,为所述第一内存空间设置一标志位以标识所述第一内存空间正在扩容中。图2示出了根据本发明一个实施例的遍历第一内存空间中每一个地址的示意图,如图2所示,每次迁移数据时,从第一内存空间中取出位于起始位置的数据,直至取出第一内存空间中的所有数据。可选地,当第一内存空间中的数据已经写满时,每隔一时间间隔判断所述第一内存空间是否为空,所述时间间隔比如可以为100毫秒。可选地,所述哈希操作可以在每次从所述第一内存空间中取出数据时进行。可选地,将数据存储到第二内存空间中后,将所述第一内存空间中的该数据删除,比如可以在每次将数据存储到第二内存空间中后,将所述第一内存空间中的该数据删除。对于第一内存空间中的某一个地址的key,其中,key为某一个用户定义的某一存储数据的唯一标识,根据哈希算法能够得到第二内存空间中与该key对应的存储位置,比如,若第一内存空间中的某一个地址的key为bd919769e9,则经过哈希算法后得到第二内存空间中与之对应的存储地址为hash(bd919769e9) = 08,也就是说,在迁移缓存数据时,将第一内存空间中存储在bd919769e9的数据迁移至第二内存空间中存储地址编号为08的位置。哈希操作的实现,可以由开发者自己定义例如,在文件系统中建立和文字的存储位置对应的格子,在格子中保存有存储的文字,例如人名,把人名转换成笔画数,然后存储在笔画数字对应的格子里比如名字总共10划的,放在10号格子,就通过哈希操作,有计划 的存在格子里了。
这样依次遍历第一内存空间中的每一个地址,就可以将第一内存空间中的缓存数 据分时、全部迁移到第二内存空间中。
如,如图3所示,如果当前的内存空间可以存储12条数据,随着数据不断的增 多,12条的存储空间已经不能满足用户的需求,则可在当前的内存空间中的数据已经写满 时自动申请一块可以存放24条数据的内存空间,并将当前内存空间中的数据缓慢的迁移 到可以存放24条数据的内存空间中,待全部数据迁移完成后,再释放当前内存空间。图3 中,上图表示当前已经不能满足用户需求的内存空间,下图表示新申请的容量大于当前内 存空间的另一内容空间。
在内存空间缓存的数据迁移的过程中,若用户对缓存在内存空间中的数据进行访 问,则先向第一内存空间发送读数据请求,读取失败时,再向第二内存空间发送读数据请 求。
根据本发明另一实施例的对缓存数据进行操作的方法流程图如图4所示,在图4 中,首先判断第一内存空间中的数据是否已经写满,若否,则结束流程;若是,则每隔一时间 间隔,判断所述第一内存空间是否为空,若否,则从所述第一内存空间中取出位于起始位置 的数据进行哈希操作,得到所述数据在第二内存空间中的存储地址,将所述数据写入到所 述第二内存空间的该存储地址上,直至取出所述第一内存空间的所有数据,同时,在将数据 存储到第二内存空间中后,将所述第一内存空间中的该数据删除;若是,则释放所述第一内 存空间,流程结束。
根据本发明的另一方面,提出一种对缓存数据进行操作的装置,该装置包括
判断子装置,适于当第一内存空间中的数据已经写满时,判断所述第一内存空间 是否为空;
读取子装置,适于在所述第一内存空间不为空时,从所述第一内存空间中取出位 于起始位置的数据,直至取出所述第一内存空间中的所有数据;
释放子装置,适于在所述第一内存空间为空时,释放所述第一内存空间;
处理子装置,适于对从所述第一内存空间中取出的数据进行哈希操作,得到所述 数据在第二内存空间中的存储地址;
写入子装置,适于将从所述第一内存空间中取出的数据写入到所述第二内存空间 的该存储地址上。
其中,所述第二内存空间的容量大于所述第一内存空间的容量。
可选地,所述装置还包括标识子装置,适于在所述第一内存空间被写满后,为所述 第一内存空间设置一标志位以标识所述第一内存空间正在扩容中。
可选地,所述判断子装置当第一内存空间中的数据已经写满时,每隔一时间间隔 判断所述第一内存空间是否为空,所述时间间隔比如可以为100毫秒。
可选地,所述装置还包括删除子装置,适于在将数据存储到所述第二内存空间中 后,将所述第一内存空间中的该数据删除,比如可以在每次将数据存储到第二内存空间中 后,将所述第一内存空间中的该数据删除。
可选地,所述装置还包括控制子装置,适于在内存空间缓存的数据迁移的过程中,若用户对缓存在内存空间中的数据进行访问,则控制先向所述第一内存空间发送读数据请 求,读取失败时,再向所述第二内存空间发送读数据请求。
另外,当第一内存空间出现大量的过期数据时,也可以按照类似上述技术方案的 方法逆向平滑地缩小该内存空间,即
根据本发明的另一方面,提出另一种对缓存数据进行操作的方法,该方法包括以 下步骤
步骤SI,若第一内存空间中的过期数据已经达到某一阈值,则判断所述第一内存 空间中是否还有有效数据,如有,则从所述第一内存空间中取出位于起始位置的有效数据, 直至取出所述第一内存空间中所有的有效数据;如无,则释放所述第一内存空间;
步骤S2,对从所述第一内存空间中取出的数据进行哈希操作,得到所述数据在第 二内存空间中的存储地址,将所述数据写入到所述第二内存空间的该存储地址上。
其中,所述第二内存空间的容量小于所述第一内存空间的容量。
可选地,在所述第一内存空间中的过期数据已经达到某一阈值后,为所述第一内 存空间设置一标志位以标识所述第一内存空间正在减少内存空间中。
可选地,当第一内存空间中的过期数据已经达到某一阈值时,每隔一时间间隔判 断所述第一内存空间中是否还有有效数据,所述时间间隔比如可以为100毫秒。
可选地,所述哈希操作可以在每次从所述第一内存空间中取出数据时进行。
可选地,将数据存储到所述第二内存空间中后,将所述第一内存空间中的该数据 删除,比如可以在每次将数据存储到第二内存空间中后,将所述第一内存空间中的该数据 删除。
这样依次遍历第一内存空间中的每一个地址,就可以将第一内存空间中的缓存数 据分时、全部迁移到第二内存空间中。
如,如果当前的内存空间中存储有24条数据,其中12条为过期数据,为了节省 系统的存储资源,可自动申请一块可以存放12条数据的空间,并将当前内存空间中的有效 数据缓慢的迁移到可以存放12条数据的内存空间中,待全部数据迁移完成后,再释放当前 内存空间。
在内存空间缓存的数据迁移的过程中,若用户对缓存在内存空间中的数据进行访 问,则先向第一内存空间发送读数据请求,读取失败时,再向第二内存空间空间读取数据请 求。
根据本发明的另一方面,提出一种对缓存数据进行操作的装置,该装置包括
判断子装置,适于当第一内存空间中的过期数据已经达到某一阈值时,判断所述 第一内存空间中是否还有有效数据;
读取子装置,适于在所述第一内存空间中还有有效数据时,从所述第一内存空间 中取出位于起始位置的有效数据,直至取出所述第一内存空间中的所有数据;
释放子装置,适于在所述第一内存空间中没有有效数据时,释放所述第一内存空 间;
处理子装置,适于对从所述第一内存空间中取出的数据进行哈希操作,得到所述 数据在第二内存空间中的存储地址;
写入子装置,适于将从所述第一内存空间中取出的数据写入到所述第二内存空间的该存储地址上。
其中,所述第二内存空间的容量小于所述第一内存空间的容量。
可选地,所述装置还包括标识子装置,适于在所述第一内存空间中的过期数据已 经达到某一阈值后,为所述第一内存空间设置一标志位以标识该所述第一内存空间正在减 少内存空间中。
可选地,所述判断子装置当第一内存空间中的过期数据已经达到某一阈值时,每 隔一时间间隔判断所述第一内存空间中是否还有有效数据,所述时间间隔比如可以为100毫秒。
可选地,所述装置还包括删除子装置,适于在将数据存储到所述第二内存空间中 后,将所述第一内存空间中的该数据删除,比如可以在每次将数据存储到第二内存空间中 后,将所述第一内存空间中的该数据删除。
可选地,所述装置还包括控制子装置,适于在内存空间缓存的数据迁移的过程中, 若用户对缓存在内存空间中的数据进行访问,则控制先向所述第一内存空间发送读数据请 求,读取失败时,再向所述第二内存空间发送读数据请求。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。 各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求 的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种 编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发 明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施 例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构 和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在 上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施 例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图即所要求保 护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面 的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此, 遵循具体实施方式
的权利要求书由此明确地并入该具体实施方式
,其中每个权利要求本身 都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地 改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单 元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或 子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任 何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开 的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴 随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代 特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例 中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任 意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行 的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用 微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的对缓存数据操作的装置 中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的 方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样 的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形 式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形 式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领 域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中, 不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在 未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这 样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来 实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件 项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为 名称。
权利要求
1.一种对缓存数据进行操作的方法,包括若第一内存空间中的数据已经写满,则判断所述第一内存空间是否为空,若否,则从所述第一内存空间中取出位于起始位置的数据,直至取出所述第一内存空间中的所有数据; 若是,则释放所述第一内存空间;对从所述第一内存空间中取出的数据进行哈希操作,得到所述数据在第二内存空间中的存储地址,将所述数据写入到所述第二内存空间的该存储地址上。
2.如权利要求1所述的方法,其特征在于,所述第二内存空间的容量大于所述第一内存空间的容量。
3.如权利要求2所述的方法,其特征在于,在所述第一内存空间被写满后,为所述第一内存空间设置一标志位以标识所述第一内存空间正在扩容中。
4.如权利要求1所述的方法,其特征在于,当第一内存空间中的数据已经写满时,每隔一时间间隔判断所述第一内存空间是否为空。
5.如权利要求1所述的方法,其特征在于,将数据存储到所述第二内存空间中后,将所述第一内存空间中的该数据删除。
6.如权利要求1所述的方法,其特征在于,在内存空间缓存的数据迁移的过程中,若用户对缓存在内存空间中的数据进行访问,则先向所述第一内存空间发送读数据请求,读取失败时,再向所述第二内存空间发送读数据请求。
7.一种对缓存数据进行操作的装置,包括判断子装置,适于当第一内存空间中的数据已经写满时,判断所述第一内存空间是否为空;读取子装置,适于在所述第一内存空间不为空时,从所述第一内存空间中取出位于起始位置的数据,直至取出所述第一内存空间中的所有数据;释放子装置,适于在所述第一内存空间为空时,释放所述第一内存空间;处理子装置,适于对从所述第一内存空间中取出的数据进行哈希操作,得到所述数据在第二内存空间中的存储地址;写入子装置,适于将从所述第一内存空间中取出的数据写入到所述第二内存空间的该存储地址上。
8.如权利要求7所述的装置,其特征在于,所述第二内存空间的容量大于所述第一内存空间的容量。
9.如权利要求7所述的装置,其特征在于,还包括标识子装置,适于在所述第一内存空间被写满后,为所述第一内存空间设置一标志位以标识所述第一内存空间正在扩容中。
10.如权利要求7所述的装置,其特征在于,所述判断子装置当第一内存空间中的数据已经写满时,每隔一时间间隔判断所述第一内存空间是否为空。
11.如权利要求7所述的装置,其特征在于,还包括删除子装置,适于在将数据存储到所述第二内存空间中后,将所述第一内存空间中的该数据删除。
12.如权利要求7所述的装置,其特征在于,还包括控制子装置,适于在内存空间缓存的数据迁移的过程中,若用户对缓存在内存空间中的数据进行访问,则控制先向所述第一内存空间发送读数据请求,读取失败时,再向所述第二内存空间发送读数据请求。
全文摘要
本发明公开了一种对缓存数据进行操作的方法和装置,所述方法包括若第一内存空间中的数据已经写满,则判断所述第一内存空间是否为空,若否,则从所述第一内存空间中取出位于起始位置的数据写入到容量较大的第二内存空间中,直至取出第一内存空间中的所有数据;若是,则释放所述第一内存空间。本发明还提出一种将第一内存空间中的缓存数据迁移至容量较小的第二内存空间中的方法,以及与所述方法相应的装置。本发明既能满足缓存容量扩充/缩减的需求,又可以保证在数据迁移期间,用户能够正常地访问缓存数据;同时还可以在数据流量高峰时,减轻数据库或磁盘的压力,进而增加整体服务的稳定性。
文档编号G06F12/08GK103019956SQ20121040745
公开日2013年4月3日 申请日期2012年10月23日 优先权日2012年10月23日
发明者杨帆 申请人:北京奇虎科技有限公司, 奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1