专利名称:缓存数据管理方法和装置的制作方法
技术领域:
本发明涉及缓存维护技术,具体而言,涉及一种缓存数据管理方法和装置。
背景技术:
缓存在分布式系统中被广泛的使用,用于提高分布式环境下节点之间的交互效 率,减少了网络交互的次数,降低对网络带宽的要求,从而使系统具有更好的响应能力和伸 缩能力。根据分布式节点的职责不同,不同节点对缓存有不同的要求。常见的缓存有页面 缓存、数据缓存、对象缓存等。页面缓存经常在负责UI展现的节点中被使用到,通过静态数 据或者模板数据的缓存,提高界面的展现效率。数据缓存在负责持久化或查询的节点上广 泛使用,一般对数据库服务器的数据进行缓存,从而减少数据库交互的次数,降低数据库的 压力。在负责业务服务的节点上,对象缓存用于业务模型的缓存,从而使业务模型能够更快 的得到构建和使用,避免不必要的数据获取和模型构建运算。无论是哪种缓存,都会涉及到 缓存数据的过期和更新,如果无法解决则会出现数据一致性问题。例如,数据缓存的数据在 数据库中发生了变化,必须更新数据缓存,使其与数据库中的数据保持一致。在分布式环境中,缓存被广泛的使用,缓存一般以(键,值)对的形式进行组织。缓 存中的数据都大多数都具有一定的时效性,随着系统业务的推进,键对应的目标数据值可 能发生变化,这就需要一种机制进行缓存中数据的更新和维护。传统的缓存数据维护方法 主要有1、设置缓存的超时,缓存使用了一段时间后,再次使用该缓存中的数据时,强制进 行缓存刷新;2、通过数据缓存端提供主动清除缓存或者主动请求缓存刷新的动作,通过人为交 互保持缓存的同步,例如每次用户登录时同步;3、数据缓存端对缓存数据的变化进行轮询,判断缓存数据是否变化,如果变化进 行缓存的数据同步。第一种和第二种方法,刷新缓存时粒度太粗,网络流量开销大,第三种方式,因为 判断缓存中的数据是否变化的操作本身就是一次分布式的交互动作,随着缓存类型和缓存 数据的增加,可能带来大量的细小网络交互动作,网络交互次数多。它们都无法保证数据的 实时一致性,容易使系统阻塞,出现系统响应时间不稳定的现象。另外由于缓存数据量一般 比较大,直接采用刷新数据的方式,对与服务器也会造成较大的压力。因此,需要一种新的用于缓存数据更新的方式,既能够及时地保证缓存数据与目 标数据的一致性,又能保证减轻更新缓存数据是的网络压力。
发明内容
本发明所要解决的技术问题在于,提供一种新的用于缓存数据更新的方式,既能 够及时地保证缓存数据与目标数据的一致性,又能保证减轻更新缓存数据是的网络压力。有鉴于此,本发明提供一种缓存数据管理方法,包括步骤102,为目标数据生成版本信息;步骤104,在缓存中设置缓存区域,将所述目标数据连同所述目标数据的版本信 息存储在所述缓存区域中作为缓存数据和所述缓存数据的版本信息,根据所述缓存数据的 版本信息设置所述缓存区域的版本信息;步骤106,在所述目标数据改变时,更新所述目标 数据的版本信息;以及步骤108,在确定所述目标数据的版本信息和所述缓存区域的版本 信息不相同时,根据所述目标数据和所述目标数据的版本信息来更新所述缓存数据以及更 新所述缓存数据的版本信息。通过该技术方案,通过版本管理,可实现仅对过期的缓存数据 进行更新。在上述技术方案中,优选地,在所述步骤108中,还通过对所述目标数据的版本信 息做镜像,并通过所述镜像取来取得所述目标数据的版本信息,以用于与所述缓存数据的 版本信息进行比较来确定所述目标数据的版本信息和所述缓存区域的版本信息是否相同。在上述技术方案中,优选地,其特征在于,在所述步骤106中,还包括对所述目标 数据的版本信息进行监听,并在监听到所述目标数据的版本信息发生变化时,对所述目标 数据的版本信息做镜像。在上述技术方案中,优选地,在所述步骤106中,还包括定时、和/或在所述缓存 数据被调用时,对所述目标数据的版本信息做镜像。在上述技术方案中,优选地,所述缓存区域的版本信息为所述缓存区域中所有缓 存数据的版本信息中的最新版本信息。本发明还提供一种缓存数据管理装置,包括版本服务模块,为目标数据生成版本 信息;缓存区域模块,在缓存中设置缓存区域,以用于将所述目标数据连同所述目标数据的 版本信息存储在所述缓存区域中作为缓存数据和所述缓存数据的版本信息,缓存端模块根 据所述缓存数据的版本信息设置所述缓存区域的版本信息;所述缓存端模块,所述版本服 务模块在所述目标数据改变时,更新所述目标数据的版本信息,所述缓存端模块在确定所 述目标数据的版本信息和所述缓存区域的版本信息不相同时,根据所述目标数据和所述目 标数据的版本信息来更新所述缓存数据以及更新所述缓存数据的版本信息。通过该技术方 案,通过版本管理,可实现仅对过期的缓存数据进行更新。在上述技术方案中,优选地,还包括版本代理模块,通过对所述目标数据的版本 信息做镜像,并通过所述镜像取得所述目标数据的版本信息,以用于与所述缓存数据的版 本信息进行比较来确定所述目标数据的版本信息和所述缓存区域的版本信息是否相同。在上述技术方案中,优选地,所述版本代理模块还对所述目标数据的版本信息进 行监听,并在监听到所述目标数据的版本信息发生变化时,对所述目标数据的版本信息做 镜像。在上述技术方案中,优选地,所述版本代理模块定时、和/或在所述缓存数据被调 用时,对所述目标数据的版本信息做镜像。在上述技术方案中,优选地,所述缓存区域的版本信息为所述缓存区域中所有缓 存数据的版本信息中的最新版本信息。通过上述技术方案,可以实现一种缓存数据管理方法和装置,能够通过该技术方 案,通过镜像技术和版本管理,可实现仅对过期的缓存数据进行更新,既能够保证缓存数据 的有效性,又能避免造成过大的网络压力。
图1是根据本发明的--个实施例的缓存斐_f理方法的流程图2是根据本发明的--个实施例的缓存斐_f理装置的框图3是根据本发明的--个实施例的缓存斐_f理装置的示意图4是根据本发明的--个实施例的缓存斐_f理装置的工作流程图5是根据本发明的--个实施例的缓存斐f理装置的工作示意图。
具体实施例方式为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实 施方式对本发明进行进一步的详细描述。在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可 以采用其他不同于在此描述的其他方式来实施,因此,本发明并不限于下面公开的具体实 施例的限制。图1是根据本发明的一个实施例的缓存数据管理方法的流程图。如图1所示,本发明提供一种缓存数据管理方法,包括步骤102,为目标数据生成 版本信息;步骤104,在缓存中设置缓存区域,将所述目标数据连同所述目标数据的版本信 息存储在所述缓存区域中作为缓存数据和所述缓存数据的版本信息,根据所述缓存数据的 版本信息设置所述缓存区域的版本信息;步骤106,在所述目标数据改变时,更新所述目标 数据的版本信息;以及步骤108,在确定所述目标数据的版本信息和所述缓存区域的版本 信息不相同时,根据所述目标数据和所述目标数据的版本信息来更新所述缓存数据以及更 新所述缓存数据的版本信息。通过该技术方案,通过版本管理,可实现仅对过期的缓存数据 进行更新。在上述技术方案中,在所述步骤108中,还通过对所述目标数据的版本信息做镜 像,并通过所述镜像取来取得所述目标数据的版本信息,以用于与所述缓存数据的版本信 息进行比较来确定所述目标数据的版本信息和所述缓存区域的版本信息是否相同。在上述技术方案中,其特征在于,在所述步骤106中,还包括对所述目标数据的 版本信息进行监听,并在监听到所述目标数据的版本信息发生变化时,对所述目标数据的 版本信息做镜像。在上述技术方案中,在所述步骤106中,还包括定时、和/或在所述缓存数据被调 用时,对所述目标数据的版本信息做镜像。在上述技术方案中,所述缓存区域的版本信息为所述缓存区域中所有缓存数据的 版本信息中的最新版本信息。图2是根据本发明的一个实施例的缓存数据管理装置的框图。如图2所示,本发明还提供一种缓存数据管理装置200,包括版本服务模块202, 为目标数据生成版本信息;缓存区域模块204,在缓存中设置缓存区域,以用于将所述目标 数据连同所述目标数据的版本信息存储在所述缓存区域中作为缓存数据和所述缓存数据 的版本信息,缓存端模块206根据所述缓存数据的版本信息设置所述缓存区域的版本信 息;所述缓存端模块206,所述版本服务模块202在所述目标数据改变时,更新所述目标数 据的版本信息,所述缓存端模块206在确定所述目标数据的版本信息和所述缓存区域的版本信息不相同时,根据所述目标数据和所述目标数据的版本信息来更新所述缓存数据以及 更新所述缓存数据的版本信息。通过该技术方案,通过版本管理,可实现仅对过期的缓存数 据进行更新。在上述技术方案中,还包括版本代理模块208,通过对所述目标数据的版本信息 做镜像,并通过所述镜像取得所述目标数据的版本信息,以用于与所述缓存数据的版本信 息进行比较来确定所述目标数据的版本信息和所述缓存区域的版本信息是否相同。在上述技术方案中,所述版本代理模块208还对所述目标数据的版本信息进行监 听,并在监听到所述目标数据的版本信息发生变化时,对所述目标数据的版本信息做镜像。在上述技术方案中,所述版本代理模块208定时、和/或在所述缓存数据被调用 时,对所述目标数据的版本信息做镜像。在上述技术方案中,所述缓存区域的版本信息为所述缓存区域中所有缓存数据的 版本信息中的最新版本信息。图3是根据本发明的一个实施例的缓存数据管理装置的示意图。如图3所示,本发明的技术方案是通过缓存的版本化和版本镜像技术解决传统的 缓存维护中面临的问题,在本实施例的缓存数据管理装置中主要包括如下的一些功能部 件缓存区域存储缓存数据,以(键,值)的方式存储数据,应用程序通过缓存区域直 接使用缓存中的数据版本服务器306(版本服务模块)在分布式环境中的一台独立的服务器,用于维 护数据的版本,它的数据形式是(键,版本),并按照缓存区域对数据进行组织版本服务代理304 (版本代理模块)负责监测缓存版本的变化,在缓存端本地或 者缓存端附近的网络中以(键,版本)的方式对版本服务器中维护的版本信息做镜像缓存端302 (缓存端模块)负责维护缓存区域,并在版本服务代理304中注册其 所关注的缓存区域的版本情况。缓存的版本信息分为两个部分a.键对应的目标数据自身的版本,我们记为Vb.缓存区域的总的版本标识区域版本,我们记为RV(Region Version)虽然缓存区域对外提供的数据结构是(键,值)对的形式,但还是可以根据它对当 前缓存数据所处的版本进行维护,通过缓存区域的版本信息与版本服务代理304的版本镜 像,可以知道当前数据是否发生变化。版本服务器306对版本的维护,采用递增的方式进行维护,也就是说每次键对应 的值发生变化,版本值V会递增。区域版本是当前区域中所有版本值中的最大值。由于版 本的单调递增的性质,可以利用这个性质进行增量的版本刷新。例如,应用程序在从缓存区 域按键取数据的时候,首先检查数据的有效性,如果数据有效,立即使用,如果数据无效,则 请求能够提供目标数据的节点,装载数据。在检查数据的有效性时,一般有个超时设置,只 有对超时的数据才进行有效性的检查。可选的,对于热点数据,本实施的缓存数据管理装置可以周期性的检查数据的有 效性,并把无效数据以批的方式刷新,减少每次请求数据时由于数据装载造成对效率的影 响。
通过以上可知,缓存区域的使用方式,决定了大部分数据是在其真实发生使用,并 且发生变化才会重新装载,避免了对没有用到的数据同步,造成带宽和存储的浪费,也避免 了由于大量数据变化或者初始化时发生巨量的网络请求。缓存端302的工作流程可以如图4所示。缓存端302在启动时,首先进行步骤402, 缓存区域的初始化,加载持久化到本地的缓存数据。然后进行步骤404,向版本代理304注 册其所关心的缓存区域,最后进行步骤406向版本代理304发起请求,对比当前缓存数据的 有效性,如果版本变化,把数据置为失效。其中,版本代理304在启动时,首先装载保存在本地的版本镜像,然后向版本服务 器306注册其所关心的版本区域,最后请求把最新的版本信息同步下来,形成最新的版本 镜像。可选的,版本代理304还试图建立与版本服务器306的长连接通道,进行版本变化的 监听。通过该通道,版本服务器306能够把缓存区域的版本变化信息通知到版本代理304。一般情况下,版本服务代理304和缓存端302都在同一个物理的进程中,对于一些 网络带宽特别低的环境,可以通过分离版本代理304和缓存端302,让很多缓存端302使用 同一版本服务代理304的方式,减少同一网络环境下,不同的缓存端302对版本服务器306 的压力和请求,但是要求缓存端302和版本服务代理304能够直接的高效的通信。缓存端302向版本服务代理304、版本服务代理304向版本服务器306注册的其所 关心的缓存区域或区域的过程,会随着缓存区域的使用发生变化,例如新加入使用一个缓 存区域,就会新注册一个关系的版本变化的缓存区域。除了版本服务代理304初始化时,主动请求版本服务器306同步缓存版本信息外, 版本代理304还可以周期性的向版本服务器306进行请求,同步缓存版本信息,以用于把缓 存端302的过期数据置为无效。缓存数据发生变化时,在版本服务器306和版本代理304之间发生的动作如图5 所示首先是步骤502,分布式环境中的目标数据提供节点对数据进行了变化后;步骤504,版本服务器306得到通知,得知数据已经变化;步骤506,版本服务器306根据所变化数据的区域和数据的键产生新的版本信息;步骤508,版本服务器306通知版本服务代理304,告知特定缓存区域的数据的版 本发生了变化。其中,版本服务代理304在每次请求版本服务器306同步版本时,版本服务器306 会为该版本服务代理304所同步每个的缓存区域,记录一个标志,表示版本服务代理304已 经对该缓存区域进行了一次最新的同步。当缓存区域数据版本发生变化时,版本服务器306检查这些标志信息,如果标志 信息已经被复位,版本服务器306对对应的缓存版本代理什么也不做;如果标志被设置,版 本服务器306把标志信息复位。如果具有长连接通道,版本服务器306将会通过该长连接 通道,告知版本服务代理304该缓存区域数据版本发生了变化,这种方法避免了不必要的 通信负荷。可选的,对于一些变化很少的缓存区域,版本服务器306对标志信息不进行复位, 而是通过长连接通道直接把该缓存区域变化的版本数据和缓存区域自身的版本信息同步 到缓存区域。
对于大部分情况下,变化的版本并不主动同步到版本服务代理304,而是版本服务 代理304发现其关心的缓存区域发生版本变化后,选择一个时机,如该缓存区域再次被使 用时或者刷新周期到达时,主动的请求同步缓存版本信息。通过以上技术方案,可以实现一种缓存数据管理方法和装置,可以通过独立的版 本服务器和版本服务代理的配合,实现了缓存区域中数据的自动刷新,保障了数据的实时 有效性。这使得由于缓存变化更新的需要产生的远程交互次数减少了数十倍,减低了服务 器的压力,数据刷新具有良好的效果。本发明的技术方案也适用于网络环境特别差的系统, 这时候一般不采用长连接监听缓存版本的变化,而是回归周期性的刷新,事实证明对于大 部分变化不是很频繁的数据,实时性能够具有良好的保障。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技 术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修 改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种缓存数据管理方法,其特征在于,包括步骤102,为目标数据生成版本信息;步骤104,在缓存中设置缓存区域,将所述目标数据连同所述目标数据的版本信息存储 在所述缓存区域中作为缓存数据和所述缓存数据的版本信息,根据所述缓存数据的版本信 息设置所述缓存区域的版本信息;步骤106,在所述目标数据改变时,更新所述目标数据的版本信息;以及步骤108,在确定所述目标数据的版本信息和所述缓存区域的版本信息不相同时,根据 所述目标数据和所述目标数据的版本信息来更新所述缓存数据以及更新所述缓存数据的 版本信息。
2.根据权利要求1所述的缓存数据管理方法,其特征在于,在所述步骤108中,还通过 对所述目标数据的版本信息做镜像,并通过所述镜像取来取得所述目标数据的版本信息, 以用于与所述缓存数据的版本信息进行比较来确定所述目标数据的版本信息和所述缓存 区域的版本信息是否相同。
3.根据权利要求2所述的缓存数据管理方法,其特征在于,在所述步骤106中,还包括 对所述目标数据的版本信息进行监听,并在监听到所述目标数据的版本信息发生变化时, 对所述目标数据的版本信息做镜像。
4.根据权利要求2所述的缓存数据管理方法,其特征在于,在所述步骤106中,还包括 定时、和/或在所述缓存数据被调用时,对所述目标数据的版本信息做镜像。
5.根据权利要求1至4中任一项所述的缓存数据管理方法,其特征在于,所述缓存区域 的版本信息为所述缓存区域中所有缓存数据的版本信息中的最新版本信息。
6.一种缓存数据管理装置,其特征在于,包括版本服务模块,为目标数据生成版本信息;缓存区域模块,在缓存中设置缓存区域,以用于将所述目标数据连同所述目标数据的 版本信息存储在所述缓存区域中作为缓存数据和所述缓存数据的版本信息,缓存端模块根 据所述缓存数据的版本信息设置所述缓存区域的版本信息;所述缓存端模块,所述版本服务模块在所述目标数据改变时,更新所述目标数据的版 本信息,所述缓存端模块在确定所述目标数据的版本信息和所述缓存区域的版本信息不相 同时,根据所述目标数据和所述目标数据的版本信息来更新所述缓存数据以及更新所述缓 存数据的版本信息。
7.根据权利要求6所述的缓存数据管理装置,其特征在于,还包括版本代理模块,通过对所述目标数据的版本信息做镜像,并通过所述镜像取得所述目 标数据的版本信息,以用于与所述缓存数据的版本信息进行比较来确定所述目标数据的版 本信息和所述缓存区域的版本信息是否相同。
8.根据权利要求7所述的缓存数据管理装置,其特征在于,所述版本代理模块还对所 述目标数据的版本信息进行监听,并在监听到所述目标数据的版本信息发生变化时,对所 述目标数据的版本信息做镜像。
9.根据权利要求7所述的缓存数据管理装置,其特征在于,所述版本代理模块定时、和 /或在所述缓存数据被调用时,对所述目标数据的版本信息做镜像。
10.根据权利要求6至9任一项所述的缓存数据管理装置,其特征在于,所述缓存区域的版本信息为所述缓存区域中所有缓存数据的版本信息中的最新版本信息。
全文摘要
本发明提供一种缓存数据管理方法,包括步骤102,为目标数据生成版本信息;步骤104,在缓存中设置缓存区域,将目标数据连同目标数据的版本信息存储在缓存区域中作为缓存数据和缓存数据的版本信息,根据缓存数据的版本信息设置缓存区域的版本信息;步骤106,在目标数据改变时,更新目标数据的版本信息;以及步骤108,在确定目标数据的版本信息和缓存区域的版本信息不相同时,根据目标数据和目标数据的版本信息来更新缓存数据以及更新缓存数据的版本信息。本发明还提供一种缓存数据管理装置。通过本发明,通过版本管理、版本镜像化,可实现仅对过期的缓存数据进行更新。
文档编号G06F9/44GK102073494SQ201010616439
公开日2011年5月25日 申请日期2010年12月30日 优先权日2010年12月30日
发明者何冠宇 申请人:用友软件股份有限公司