本发明专利技术属于计算机信息处理技术,具体涉及一种服务器端无障碍存取高速缓存数据的方法。该方法在每个服务器进程中创建一个数据缓存对象,数据缓存对象在内存中建立两个数据缓存区、两个对应的读计数器、一个缓存区标志;在每个服务器进程中创建一个独立的线程,用于刷新两个数据缓存区,在任一时刻,一个缓存区已经准备好数据供其他线程读取,另外一个缓存区在进行刷新操作,刷新完成后将其标志为当前已经准备好的缓存区;在进行缓存区数据读取操作时,判断缓存区标志的值,读取其中一个已经准备好的缓存区的数据。本发明专利技术能够在服务器集群的方式下,将变更的数据高效独立地同步到各个服务器的数据缓存区中,数据缓存区的读取操作不会被阻塞和延迟。
【技术实现步骤摘要】
本专利技术属于计算机信息处理技术,具体涉及一种服务器端无障碍存取高速缓存数 据的方法。
技术介绍
目前,在计算机服务器上数据缓存技术通常存在两种方式,一种为实时数据区和 缓存数据区一体化的方式,另一种为实时数据区和缓存数据区分开的方式,这两种方式分 别存在着缺陷和不足。实时数据区和缓存数据区一体化的方式存在如下缺陷 在服务器集群的方式下,变更数据只能最先在一个服务器的数据缓存区同步, 然后通过服务器间的同步机制进行数据同步,后者效率较低。服务器站点越多、更新越频 繁、缓存的对象越大,越影响性能。 数据变更操作会阻塞数据读取操作,影响读取操作效率。变更数据操作和读取 数据操作越频繁,影响越严重。 不经过服务器的数据变更处理后,其变更的数据无法进入到缓存区中。实时数 据区和缓存数据区分开的方式存在如下缺陷 数据缓存区的数据与最新实时数据之间存在的时间差过长。 为了减少这个时间差,就采取加快刷新缓存区操作的频率的方式,而这种方式 又会引起数据缓存区的读取操作和刷新操作之间相互阻塞影响。刷新操作和读取操作越频 繁,影响越严重。另外,由于现有的数据缓存方案通常采用单缓存区,读取缓存区操作和刷新缓存 区操作均针对同一个缓存区进行,互相阻塞,存在冲突。
技术实现思路
本专利技术的目的是为了解决现有技术中存在的缓存区的刷新操作和读取操作相冲 突的问题,并避免服务器集群方式下的缓存数据和实时数据不一致的问题,提供一种服务 器端无障碍存取高速缓存数据的方法。本专利技术的技术方案如下一种,包括如 下步骤(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)在每个服务器进程中创建一个独立的线程,用于刷新数据缓存对象中的两个数据缓存区,在任一时刻,其中一个缓存区已经准备好数据供其他线程读取,另外一个缓存区在进行刷新本文档来自技高网...
【技术保护点】
一种服务器端无障碍存取高速缓存数据的方法,包括如下步骤:(1)在服务器集群的每个服务器进程中创建一个数据缓存对象,数据缓存对象在内存中建立两个数据缓存区、两个对应的读计数器、一个缓存区标志;(2)在每个服务器进程中创建一个独立的线程,用于刷新数据缓存对象中的两个数据缓存区,在任一时刻,其中一个缓存区已经准备好数据供其他线程读取,另外一个缓存区在进行刷新操作,刷新完成后将其标志为当前已经准备好的缓存区;(3)在进行缓存区数据的读取操作时,通过判断缓存区标志的值,读取其中一个已经准备好的缓存区的数据。
【技术特征摘要】
【专利技术属性】
技术研发人员:陈宏华,
申请(专利权)人:北京用友政务软件有限公司,
类型:发明
国别省市:11[中国|北京]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。