专利名称:服务器端无障碍存取高速缓存数据的方法
技术领域:
本发明属于计算机信息处理技术,具体涉及一种服务器端无障碍存取高速缓存数 据的方法。
背景技术:
目前,在计算机服务器上数据缓存技术通常存在两种方式,一种为实时数据区和 缓存数据区一体化的方式,另一种为实时数据区和缓存数据区分开的方式,这两种方式分 别存在着缺陷和不足。实时数据区和缓存数据区一体化的方式存在如下缺陷 在服务器集群的方式下,变更数据只能最先在一个服务器的数据缓存区同步, 然后通过服务器间的同步机制进行数据同步,后者效率较低。服务器站点越多、更新越频 繁、缓存的对象越大,越影响性能。 数据变更操作会阻塞数据读取操作,影响读取操作效率。变更数据操作和读取 数据操作越频繁,影响越严重。 不经过服务器的数据变更处理后,其变更的数据无法进入到缓存区中。实时数 据区和缓存数据区分开的方式存在如下缺陷 数据缓存区的数据与最新实时数据之间存在的时间差过长。 为了减少这个时间差,就采取加快刷新缓存区操作的频率的方式,而这种方式 又会引起数据缓存区的读取操作和刷新操作之间相互阻塞影响。刷新操作和读取操作越频 繁,影响越严重。另外,由于现有的数据缓存方案通常采用单缓存区,读取缓存区操作和刷新缓存 区操作均针对同一个缓存区进行,互相阻塞,存在冲突。
发明内容
本发明的目的是为了解决现有技术中存在的缓存区的刷新操作和读取操作相冲 突的问题,并避免服务器集群方式下的缓存数据和实时数据不一致的问题,提供一种服务 器端无障碍存取高速缓存数据的方法。本发明的技术方案如下一种服务器端无障碍存取高速缓存数据的方法,包括如 下步骤(1)在服务器集群的每个服务器进程中创建一个数据缓存对象,数据缓存对象在 内存中建立两个数据缓存区、两个对应的读计数器、一个缓存区标志;(2)在每个服务器进程中创建一个独立的线程,用于刷新数据缓存对象中的两个 数据缓存区,在任一时刻,其中一个缓存区已经准备好数据供其他线程读取,另外一个缓存 区在进行刷新操作,刷新完成后将其标志为当前已经准备好的缓存区;(3)在进行缓存区数据的读取操作时,通过判断缓存区标志的值,读取其中一个已 经准备好的缓存区的数据。
进一步,如上所述的服务器端无障碍存取高速缓存数据的方法,在步骤(2)中,独 立的线程依次循环刷新两个数据缓存区,在完成第一缓存区的数据刷新后,设置缓存区标 志使其标志为第一缓存区准备好可读;然后刷新第二缓存区,完成第二缓存区的刷新后,设 置缓存区标志使其标志为第二缓存区准备好可读。更进一步,如上所述的服务器端无障碍存取高速缓存数据的方法,在步骤(2)中, 在刷新其中一个数据缓存区之前,先判断其对应的读计数器是否为0,如果不为0,则表示 当前还有读缓存区的操作正在进行,用于刷新缓存区的独立线程进入等待状态,直到对应 的读计数器为0,再进行刷新操作。进一步,如上所述的服务器端无障碍存取高速缓存数据的方法,在步骤(3)中,判 断缓存区标志的值,如果其标志为第一缓存区准备好可读,则读取第一缓存区的数据,如果 其标志为第二缓存区准备好可读,则读取第二缓存区的数据。更进一步,如上所述的服务器端无障碍存取高速缓存数据的方法,在步骤(3)中, 在读取其中一个缓存区的数据之前,设置其对应的读计数器加1,数据读取结束后,设置其 对应的读计数器减1。本发明的有益效果如下本发明所提供的服务器端无障碍存取高速缓存数据的方 法,在每个服务器进程中创建数据缓存对象,并创建独立的刷新进程,能够在服务器集群的 方式下,将变更的数据高效独立地同步到各个服务器的数据缓存区中;由于采用双缓存区 的技术手段,数据缓存区的读取操作不会被阻塞;而且可以任意缩短刷新缓存区的时间间 隔。
图1为本发明的方法流程图;图2为本发明的功能结构示意图。
具体实施例方式下面结合附图和实施例对本发明进行详细的描述。如图1所示,本发明所提供的服务器端无障碍存取高速缓存数据的方法包括如下 步骤步骤1、创建数据缓存对象X首先,在每个服务器进程中创建一个数据缓存对象X。数据缓存对象X在内存中 建立两个数据缓存区(bufl、buf2)、两个对应的读计数器(cntl、cnt2)、一个缓存区标志 (flag)。步骤2、创建独立的线程T,用于刷新缓存数据在每个服务器进程中创建一个独立的线程T。线程T用于刷新数据缓存对象X中 的两个数据缓存区(bufl、buf 2),并设置缓存区标志(flag)。线程是一段完成某个特定功能的代码,是程序中单个顺序的流控制。本发明利用 单个程序中可以同时运行多个线程来执行不同任务的原理,创建一个专门的线程用来刷新 两个数据缓存区(buf!、buf2),并设置缓存区标志(flag)。线程T刷新两个缓存区的方式是 依次循环刷新缓存区bufl和缓存区buf2。在完成缓存区bufl的数据刷新后,设置缓存区标志(flag)使其标志为bufl准备好可读,停顿一段时间后(可选),然后刷新缓存区buf2, 完成缓存区buf2的刷新后,设置缓存区标志(flag)使其标志为buf2准备好可读。线程T在刷新某个数据缓存区之前,先判断其对应的读计数器是否为0 (读计数器 的初始状态为0),如果不为0,则表示当前还有读缓存区的操作正在进行,线程T进入等待 状态,直到对应的读计数器为0,才进行刷新操作。如线程T在刷新数据缓存区bufl之前, 先判断读计数器cntl是否为0,并等待直到读计数器cntl为0才刷新数缓存区bufl。步骤3、读取数据缓存区缓存区数据读取操作时,判断缓存区标志(flag)的值,如果其标志为缓存区bufl 准备好可读,则读取缓存区bufl的数据,如果其标志为缓存区buf2准备好可读,则读取缓 存区buf2的数据。读取某个缓存区的数据前,设置其对应的读计数器加1,数据读取结束后,设置其 对应的读计数器减1。如读取缓存区bufl前,将读计数器cntl加1,读取结束后,将读计 数器cntl减1。如图2的功能结构所示,通过上述方法的步骤,服务器进程中的独立线程先判断 缓存区bufl对应的读计数器是否为0,如果为0,则刷新缓存区bufl,设置缓存区标志flag 使其标志为bufl准备好可读,然后经过一段时间,判断缓存区buf2对应的读计数器是否为 0,如果为0,再刷新缓存区buf2,设置缓存区标志flag使其标志为buf2准备好可读;同时, 缓存区的数据读取线程判断缓存区标志flag的值,确定缓存区bufl是否准备好可读,如果 准备好可读,设置其对应的读计数器cntl加1,然后读取缓存区bufl的数据,读取结束后, 将其对应的读计数器cntl减1,接下来,确定缓存区buf2是否准备好可读,如果准备好可 读,设置其对应的读计数器cnt2加1,然后读取缓存区buf2的数据,读取结束后,将其对应 的读计数器cnt2减1。循环上述操作,便可以实现数据缓存区的连续刷新,不会出现读取操 作被阻塞或延迟的情况。显然,本领域的技术人员可以对本发明进行各种形式上的改动和变型而不脱离本 发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技 术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
一种服务器端无障碍存取高速缓存数据的方法,包括如下步骤(1)在服务器集群的每个服务器进程中创建一个数据缓存对象,数据缓存对象在内存中建立两个数据缓存区、两个对应的读计数器、一个缓存区标志;(2)在每个服务器进程中创建一个独立的线程,用于刷新数据缓存对象中的两个数据缓存区,在任一时刻,其中一个缓存区已经准备好数据供其他线程读取,另外一个缓存区在进行刷新操作,刷新完成后将其标志为当前已经准备好的缓存区;(3)在进行缓存区数据的读取操作时,通过判断缓存区标志的值,读取其中一个已经准备好的缓存区的数据。
2.如权利要求1所述的服务器端无障碍存取高速缓存数据的方法,其特征在于在步 骤(2)中,独立的线程依次循环刷新两个数据缓存区,在完成第一缓存区的数据刷新后,设 置缓存区标志使其标志为第一缓存区准备好可读;然后刷新第二缓存区,完成第二缓存区 的刷新后,设置缓存区标志使其标志为第二缓存区准备好可读。
3.如权利要求2所述的服务器端无障碍存取高速缓存数据的方法,其特征在于在步 骤(2)中,在刷新其中一个数据缓存区之前,先判断其对应的读计数器是否为0,如果不为 0,则表示当前还有读缓存区的操作正在进行,用于刷新缓存区的独立线程进入等待状态, 直到对应的读计数器为0,再进行刷新操作。
4.如权利要求1所述的服务器端无障碍存取高速缓存数据的方法,其特征在于在步 骤(3)中,判断缓存区标志的值,如果其标志为第一缓存区准备好可读,则读取第一缓存区 的数据,如果其标志为第二缓存区准备好可读,则读取第二缓存区的数据。
5.如权利要求4所述的服务器端无障碍存取高速缓存数据的方法,其特征在于在步 骤(3)中,在读取其中一个缓存区的数据之前,设置其对应的读计数器加1,数据读取结束 后,设置其对应的读计数器减1。
全文摘要
本发明属于计算机信息处理技术,具体涉及一种服务器端无障碍存取高速缓存数据的方法。该方法在每个服务器进程中创建一个数据缓存对象,数据缓存对象在内存中建立两个数据缓存区、两个对应的读计数器、一个缓存区标志;在每个服务器进程中创建一个独立的线程,用于刷新两个数据缓存区,在任一时刻,一个缓存区已经准备好数据供其他线程读取,另外一个缓存区在进行刷新操作,刷新完成后将其标志为当前已经准备好的缓存区;在进行缓存区数据读取操作时,判断缓存区标志的值,读取其中一个已经准备好的缓存区的数据。本发明能够在服务器集群的方式下,将变更的数据高效独立地同步到各个服务器的数据缓存区中,数据缓存区的读取操作不会被阻塞和延迟。
文档编号G06F12/08GK101887399SQ20101021133
公开日2010年11月17日 申请日期2010年6月28日 优先权日2010年6月28日
发明者陈宏华 申请人:北京用友政务软件有限公司