处理分散式缓存数据的方法和装置制造方法

文档序号:6619858阅读:203来源:国知局
处理分散式缓存数据的方法和装置制造方法
【专利摘要】本发明提供一种处理分散式缓存数据的方法和装置,有助于保证用户访问的缓存数据与数据库数据相一致,并有助于减轻服务器负荷。在有终端更新数据库数据时,应用系统实例根据终端提供的数据更新数据库以及缓存中的数据,以及判断终端是否提供缓存标识,若是,则更新该缓存标识然后返回给终端,否则创建缓存标识然后返回给终端;在有终端查询数据库数据时,应用系统实例判断终端是否提供了缓存标识;若提供,则根据缓存标识判断自身缓存的被查数据是否与数据库中的数据一致,若一致则将缓存数据返回给终端,否则将数据库数据返回给终端;若未提供,则将数据库数据返回给终端,以及按数据库数据更新缓存数据,并且创建缓存标识然后返回给终端。
【专利说明】 处理分散式缓存数据的方法和装置

【技术领域】
[0001]本发明涉及计算机网络【技术领域】,特别地涉及一种处理分散式缓存数据的方法和
>J-U ρ?α装直。

【背景技术】
[0002]在当今Web应用系统(以下简称为应用系统)中,集群部署应用系统是广泛采用的部署方式。集群部署应用系统通常包含多个实例,实例是Web应用服务器上(Tomcat、Jboss等)部署应用系统的具体服务实例,可单独为用户提供访问服务。用户在访问应用系统时,按应用系统的负荷分配机制,每次访问到的实例与上次访问到的实例相同或者不相同。图1是根据现有技术中的应用系统的结构的示意图。如图1所示,用户使用的终端可以通过互联网11访问应用系统10,应用系统10包括多个应用服务器,各个应用服务器上部署有实例,每个实例具有缓存。现有应用系统实例之间数据缓存的方式很多为分散式缓存。分散式缓存是指将应用系统的数据库中的数据放入到各个应用系统实例的缓存中,应用系统实例每次查询都是先到本实例缓存中查询数据,如果有,返回数据;如果没有,到数据库中查询数据,放入本实例缓存当中,并返回数据。用户使用终端修改数据库数据时,应用系统实例按照用户提供的新数据,对数据库中的数据修改之后,还要修改该应用系统实例缓存的数据,并且触发缓存的同步机制,将数据同步给其他应用系统实例的缓存,以期保持各个应用系统实例缓存中用户数据的一致性。
[0003]但是缓存的同步机制仍不能消除系统实例缓存之间的数据延迟问题,这使得用户访问到的数据可能与数据库中的数据不一致。例如,当前数据库中有数据X,数据X同时被各实例缓存;用户A访问应用系统实例1,将数据库中的数据X修改为Y;用户A再次访问应用系统时,访问到的是应用系统的另一实例2,就会查询到应用实例2中缓存的数据,如果向实例2的数据同步发生延迟,即实例2的缓存数据仍为X,在这种情况下,用户A得到的是该数据X,而非修改后的数据Y。数据同步延迟问题会随着Web应用系统实例数量的增加而越发严重,使得用户访问到的数据与数据库数据不一致的情况增多。缓存的同步机制使服务器之间数据交互量增大,加重了服务器负荷,影响了服务器性能。


【发明内容】

[0004]有鉴于此,本发明提供一种处理分散式缓存数据的方法和装置,有助于保证用户访问的缓存数据与数据库数据相一致,并且有助于减轻服务器负荷。
[0005]为实现上述目的,根据本发明的一个方面,提供了一种处理分散式缓存数据的方法和装置。
[0006]本发明的处理分散式缓存数据的方法,用于处理缓存在内存中的数据库数据,该方法包括:在有终端更新数据库数据时,该终端访问到的应用系统实例根据该终端提供的数据更新数据库以及缓存中的数据,以及判断该终端是否提供缓存标识,若是,则更新该缓存标识然后返回给该终端,否则创建缓存标识然后返回给该终端;所述缓存标识用于按缓存的数据类型分别记录各实例中缓存的数据是否与数据库中的数据相一致;在有终端查询数据库数据时,该终端访问到的应用系统实例判断该终端是否提供了缓存标识;若终端提供了缓存标识,根据该缓存标识判断自身缓存的被查数据是否与数据库中的数据一致,若一致则将缓存的数据返回给该终端,若不一致则将数据库中的数据返回给该终端;若终端未提供缓存标识,则将数据库中的数据返回给该终端,以及按数据库数据更新缓存数据,并且创建缓存标识然后返回给该终端。
[0007]可选地,所述缓存标识保存在Cookie中。
[0008]可选地,所述缓存标识包括标准缓存标识和实例缓存标识;标准缓存标识用于按应用系统的数据类型分别记录最近一次修改该数据类型的缓存数据的应用系统实例的标识;实例缓存标识有多个,分别与应用系统实例对应,用于按应用系统的数据类型记录应用系统实例中的缓存数据的最新版本,版本值为最近一次修改该应用系统实例中的该缓存数据的应用系统实例的标识。
[0009]根据本发明的另一方面,提供了一种处理分散式缓存数据的装置。
[0010]本发明的处理分散式缓存数据的装置,用于处理缓存在内存中的数据库数据,该装置包括:更新数据模块,用于根据来访的终端提供的数据更新数据库以及缓存中的数据,以及判断该终端是否提供缓存标识,若是,则更新该缓存标识然后返回给该终端,否则创建缓存标识然后返回给该终端;所述缓存标识用于按缓存的数据类型分别记录各实例中缓存的数据是否与数据库中的数据相一致;查询数据模块,用于判断来访的终端是否提供了缓存标识;若终端提供了缓存标识,根据该缓存标识判断自身缓存的被查数据是否与数据库中的数据一致,若一致则将缓存的数据返回给该终端,若不一致则将数据库中的数据返回给该终端;若终端未提供缓存标识,则将数据库中的数据返回给该终端,以及按数据库数据更新缓存数据,并且创建缓存标识然后返回给该终端。
[0011]可选地,所述更新数据模块和所述查询数据模块还用于从来访的终端提供的Cookie中获取所述缓存标识。
[0012]可选地,所述缓存标识包括标准缓存标识和实例缓存标识;标准缓存标识用于按应用系统的数据类型分别记录最近一次修改该数据类型的缓存数据的应用系统实例的标识;实例缓存标识有多个,分别与应用系统实例对应,用于按应用系统的数据类型记录应用系统实例中的缓存数据的最新版本,版本值为最近一次修改该应用系统实例中的该缓存数据的应用系统实例的标识。
[0013]根据本发明的技术方案,采用缓存标识来记录应用系统的各实例中缓存的数据是否与数据库中的数据相一致,在终端访问应用系统实例时,终端向实例提供缓存标识,该实例根据缓存标识来判断自身缓存的数据与数据库中的数据是否一致,若一致则向终端提供缓存数据,反之则提供数据库中的数据。这种方式取消了原有的缓存数据同步机制,减轻服务器负荷,并有助于保证用户访问的缓存数据与数据库数据相一致,另外在终端重复访问实例时仍能快速提供缓存数据,提高了终端获取数据的效率。

【专利附图】

【附图说明】
[0014]附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
[0015]图1是根据现有技术中的应用系统的结构的示意图;
[0016]图2是根据本发明实施例的缓存标识的结构的示意图;
[0017]图3是根据本发明实施例的更新数据库数据的基本步骤的示意图;
[0018]图4是根据本发明实施例的查询数据库数据的基本步骤的示意图;
[0019]图5是根据本发明实施例的处理分散式缓存数据的装置的基本结构的示意图。

【具体实施方式】
[0020]以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识至IJ,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
[0021]在本发明实施例中,采用缓存标识来记录应用系统的各实例中缓存的数据是否与数据库中的数据相一致,在终端访问应用系统实例时,终端向实例提供缓存标识,该实例根据缓存标识来判断自身缓存的数据与数据库中的数据是否一致,若一致则向终端提供缓存数据,反之则提供数据库中的数据。以下先结合图2,对本实施例采用的缓存标识的结构做出说明。
[0022]图2是根据本发明实施例的缓存标识的结构的示意图。如图2所示,缓存标识2由一个标准缓存标识21和多个实例缓存标识构成,实例缓存标识与应用系统实例对应,例如应用系统有4个实例,则有图2中的实例缓存标识221、222、223以及224。
[0023]图2示出的缓存标识考虑了应用系统具有多个数据类型的情况,即标准缓存标识和实例缓存标识都是字符串,字符串的每一位对应一种数据类型。标准缓存标识21记录的是最近一次修改缓存数据的应用系统实例的标识。因为应用系统有4个实例,所以这4个实例的标识依次为1、2、3、4。例如标准缓存标识21为“ 91299999 ”,其中左起第二位的“ I ”表示第二种类型的数据被缓存的值最近是被应用系统实例I修改过,第三位的“2”表示第三种类型的数据被缓存的值最近是被应用系统实例2修改过。其他位上的“O”表示缓存标识在被生成之后这些位对应的数据类型未被任何实例修改过。
[0024]图2中的实例缓存标识的字符串长度与标准缓存的字符串长度一致,按顺序每一位与实例缓存标识的每一位对应相同的数据类型。各位记录的是其对应的数据类型的数据在应用系统实例的缓存中的最新版本,版本值为最近一次修改该应用系统实例中的该缓存数据的应用系统实例的标识。例如实例缓存标识222为“00200000”,表示对于实例2缓存的数据,第三种数据类型的数据最近是被实例3修改过,其与标准缓存21中的第三位相同,因此根据图2中的缓存标识可以确定实例2缓存的第三种数据类型的数据与数据库中的数据相同。
[0025]从上面的说明可以看出,标准缓存标识反映了缓存数据的最新状态,即不论是哪个实例修改了缓存数据,都能够在标准缓存标识中体现出来;而实例缓存标识只能体现其对应的实例中缓存的数据的状态。这样就可以得出,按数据类型(即按标准缓存标识中的每一位和实例缓存标识中的每一位)来看,如果实例缓存标识与标准缓存标识相一致,则说明该实例缓存的数据是最近一次被修改的数据,对应的实例中缓存的该类型的数据必然与数据库中的数据相一致;另外从以下的描述可以看出,该修改可以是该实例做出的修改,也可以是其他实例查询数据后作出的修改。
[0026]以下结合图3,对本发明实施例的更新数据库数据的流程举例加以说明。图3是根据本发明实施例的更新数据库数据的基本步骤的示意图。在图3中,以终端访问到应用系统实例2,将数据库中的第三种数据类型的数据X修改为数据Y为例。
[0027]步骤S31:终端将数据Y提交到实例2。
[0028]步骤S32:实例2将数据库中的数据X修改为Y。
[0029]步骤S33:实例2将缓存中的数据X修改为Y。
[0030]步骤S34:实例2判断终端是否提供缓存标识。若是,进入步骤S35,否则进入步骤S36。终端可以采用Cookie来携带缓存标识。
[0031]步骤S35:实例2更新缓存标识。例如终端提供的缓存标识为:
[0032]91999999|01000000|00000000|00000000|00000000
[0033]因为由实例2修改了第三种数据类型的数据,所以上面的标准缓存标识即第一段字符串的第三位修改为实例2的标识“2” ;并且对应于实例2的实例缓存标识即第三段字符串的第三位修改为实例2的标识“2”。于是更新后的缓存标识为:
[0034]91299999|01000000|00200000|00000000|00000000
[0035]步骤S36:创建缓存标识。因为由实例2修改了第三种数据类型的数据,所以创建的缓存标识为:
[0036]99299999|00000000|00200000|00000000|00000000
[0037]因为在其他流程中,需比较标准缓存标识与实例缓存标识的异同,所以新创建的缓存标识中,标准缓存标识与实例缓存标识除了本流程中涉及的位置以外,其他位置应有所区别,所以选择不作为实例标识的数字9和O放在其他位置中。
[0038]步骤S36之后结束流程,此时数据库中的数据X被修改为Y,执行该修改的实例2的缓存中的数据X也变为数据Y。但其他实例的缓存中仍为数据X。
[0039]以下结合图4,对本发明实施例的查询数据库数据的流程举例加以说明。图4是根据本发明实施例的查询数据库数据的基本步骤的示意图。在图4中,以终端访问到实例3,查询第二种数据类型的数据为例。
[0040]步骤S41:终端向实例3提交查询请求。例如该查询请求是查询待查数据A。查询请求中,包含了待查数据的标识A,并且在提供缓存标识的情况下包含了缓存标识。
[0041]步骤S42:实例3检查终端是否提供缓存标识。若是,进入步骤S43,否则进入步骤S46和步骤S47。
[0042]步骤S43:判断缓存标识中的标准缓存标识和实例3对应的实例缓存标识中,待查数据A的数据类型对应的位是否相同。若是,进入步骤S44,否则进入步骤S48。这里的判断结果为“相同”,意味着实例缓存的数据A (如果有的话)与数据库中的数据A相一致。
[0043]步骤S44:判断实例3的缓存中是否有待查数据A。若是,进入步骤S45,否则进入步骤S46。因为缓存有可能因硬件停机或其他原因被损坏,所以需检查缓存数据是否存在。
[0044]步骤S45:实例3将查询结果发送给终端。如果是从步骤S44之后到达步骤S45,则查询结果中包含缓存中的待查数据。如果是从步骤S46、步骤S47或步骤S48到达步骤S45,则是步骤S46和步骤S48都执行完成后执行一次步骤S45,或者是步骤S46和步骤S47都执行完成后执行一次步骤S45。
[0045]步骤S46:实例3从数据库中查询数据A,然后放入缓存。本步骤之后返回步骤S45。
[0046]步骤S47:创建缓存标识。因待查数据A属于第二种数据类型,所以创建的缓存标识为:
[0047]93999999|00000000|00000000|03000000|00000000
[0048]本步骤之后进入步骤S45。该创建的缓存标识表示实例3中的数据与数据库数据一致,实例3中的数据有可能与数据库数据一致,也可能不一致,所以对实例来说还需将数据库的数据放入缓存。
[0049]步骤S48:修改缓存标识。这里的修改分为两种情况。第一种情况是当前终端以前未查询过待查数据A,这种情况下,其提供的缓存标识例如:99299999 | 00000000 | 00200000 I 00000000 I 00000000
[0050]此时修改后的缓存标识为:
[0051 ] 93299999|00000000|00200000|03000000|00000000
[0052]即第一段的第二位和第四段的第二位修改为“3”。
[0053]第二种情况是当前终端曾经在实例4上查询过待查数据A,查询之后得到了缓存标识例如:
[0054]94999999|00000000|00000000|00000000|04000000
[0055]该缓存标识在步骤S41中被提供。在步骤S43中,具体判断的是第一段的第二位
(4)与第四段的第二位(O)是否相同,因此判断结果为不相同,在步骤S48中,具体是将第五段的第二位O修改为4,得到的缓存标识为:94999999 | 00000000 | 00000000 | 04000000 | 04000000可以看出如果当前终端再次在实例3或实例4上查询数据A,并且数据A未被修改过,则按上述流程,将从步骤S44进入步骤S45。
[0056]上述两种情况中,修改后的缓存标识都表示实例3的缓存数据与数据库的数据一致,实例3中的数据有可能与数据库数据一致,也可能不一致,因此对实例来说还需将数据库的数据放入缓存。
[0057]从图4的流程可以看出,在终端第一次查询缓存数据,或者终端在某个实例上是第一次查询缓存数据,被访问的实例都是从数据库中取数据给终端,保证了数据的正确性;当终端再次查询缓存数据,在该缓存数据未被修改的情况下,实例可以直接将缓存数据提供给终端,有助于提高终端查询数据的速度。
[0058]图5是根据本发明实施例的处理分散式缓存数据的装置的基本结构的示意图。该装置可以设置在各个应用服务器中。如图5所示,处理分散式缓存数据的装置50主要包括更新数据模块51和查询数据模块52。
[0059]更新数据模块51用于根据来访的终端提供的数据更新数据库以及缓存中的数据,以及判断该终端是否提供缓存标识,若是,则更新该缓存标识然后返回给该终端,否则创建缓存标识然后返回给该终端;所述缓存标识用于按缓存的数据类型分别记录各实例中缓存的数据是否与数据库中的数据相一致。
[0060]查询数据模块52用于判断来访的终端是否提供了缓存标识;若终端提供了缓存标识,根据该缓存标识判断自身缓存的被查数据是否与数据库中的数据一致,若一致则将缓存的数据返回给该终端,若不一致则将数据库中的数据返回给该终端;若终端未提供缓存标识,则将数据库中的数据返回给该终端,以及按数据库数据更新缓存数据,并且创建缓存标识然后返回给该终端。
[0061]更新数据模块51和查询数据模块52还可用于从来访的终端提供的Cookie中获取缓存标识。
[0062]根据本发明实施例的技术方案,采用缓存标识来记录应用系统的各实例中缓存的数据是否与数据库中的数据相一致,在终端访问应用系统实例时,终端向实例提供缓存标识,该实例根据缓存标识来判断自身缓存的数据与数据库中的数据是否一致,若一致则向终端提供缓存数据,反之则提供数据库中的数据。这种方式取消了原有的缓存数据同步机制,减轻服务器负荷,并有助于保证用户访问的缓存数据与数据库数据相一致,另外在终端重复访问实例时仍能快速提供缓存数据,提高了终端获取数据的效率。
[0063]以上结合具体实施例描述了本发明的基本原理,但是,需要指出的是,对本领域的普通技术人员而言,能够理解本发明的方法和设备的全部或者任何步骤或者部件,可以在任何计算装置(包括处理器、存储介质等)或者计算装置的网络中,以硬件、固件、软件或者它们的组合加以实现,这是本领域普通技术人员在阅读了本发明的说明的情况下运用他们的基本编程技能就能实现的。
[0064]因此,本发明的目的还可以通过在任何计算装置上运行一个程序或者一组程序来实现。所述计算装置可以是公知的通用装置。因此,本发明的目的也可以仅仅通过提供包含实现所述方法或者装置的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本发明,并且存储有这样的程序产品的存储介质也构成本发明。显然,所述存储介质可以是任何公知的存储介质或者将来开发出的任何存储介质。
[0065]还需要指出的是,在本发明的装置和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本发明的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。
[0066]上述【具体实施方式】,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
【权利要求】
1.一种处理分散式缓存数据的方法,用于处理缓存在内存中的数据库数据,其特征在于,该方法包括: 在有终端更新数据库数据时,该终端访问到的应用系统实例根据该终端提供的数据更新数据库以及缓存中的数据,以及判断该终端是否提供缓存标识,若是,则更新该缓存标识然后返回给该终端,否则创建缓存标识然后返回给该终端;所述缓存标识用于按缓存的数据类型分别记录各实例中缓存的数据是否与数据库中的数据相一致; 在有终端查询数据库数据时,该终端访问到的应用系统实例判断该终端是否提供了缓存标识;若终端提供了缓存标识,根据该缓存标识判断自身缓存的被查数据是否与数据库中的数据一致,若一致则将缓存的数据返回给该终端,若不一致则将数据库中的数据返回给该终端;若终端未提供缓存标识,则将数据库中的数据返回给该终端,以及按数据库数据更新缓存数据,并且创建缓存标识然后返回给该终端。
2.根据权利要求1所述的方法,其特征在于,所述缓存标识保存在Cookie中。
3.根据权利要求1或2所述的方法,其特征在于,所述缓存标识包括标准缓存标识和实例缓存标识;标准缓存标识用于按应用系统的数据类型分别记录最近一次修改该数据类型的缓存数据的应用系统实例的标识;实例缓存标识有多个,分别与应用系统实例对应,用于按应用系统的数据类型记录应用系统实例中的缓存数据的最新版本,版本值为最近一次修改该应用系统实例中的该缓存数据的应用系统实例的标识。
4.一种处理分散式缓存数据的装置,用于处理缓存在内存中的数据库数据,其特征在于,该装置包括: 更新数据模块,用于根据来访的终端提供的数据更新数据库以及缓存中的数据,以及判断该终端是否提供缓存标识,若是,则更新该缓存标识然后返回给该终端,否则创建缓存标识然后返回给该终端;所述缓存标识用于按缓存的数据类型分别记录各实例中缓存的数据是否与数据库中的数据相一致; 查询数据模块,用于判断来访的终端是否提供了缓存标识;若终端提供了缓存标识,根据该缓存标识判断自身缓存的被查数据是否与数据库中的数据一致,若一致则将缓存的数据返回给该终端,若不一致则将数据库中的数据返回给该终端;若终端未提供缓存标识,则将数据库中的数据返回给该终端,以及按数据库数据更新缓存数据,并且创建缓存标识然后返回给该终端。
5.根据权利要求4所述的装置,其特征在于,所述更新数据模块和所述查询数据模块还用于从来访的终端提供的Cookie中获取所述缓存标识。
6.根据权利要求4或5所述的装置,其特征在于,所述缓存标识包括标准缓存标识和实例缓存标识;标准缓存标识用于按应用系统的数据类型分别记录最近一次修改该数据类型的缓存数据的应用系统实例的标识;实例缓存标识有多个,分别与应用系统实例对应,用于按应用系统的数据类型记录应用系统实例中的缓存数据的最新版本,版本值为最近一次修改该应用系统实例中的该缓存数据的应用系统实例的标识。
【文档编号】G06F12/08GK104133783SQ201410330320
【公开日】2014年11月5日 申请日期:2014年7月11日 优先权日:2014年7月11日
【发明者】韩松 申请人:北京京东尚科信息技术有限公司, 北京京东世纪贸易有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1