发明内容
本发明提供一种缓存数据的更新方法、数据使用端和系统,以保证有可用的缓存数据。
本发明提供一种缓存数据的更新方法,其数据使用端初始化形成缓存数据对象的主用槽位和备用槽位,包括:
数据使用端从数据库加载配置数据,构造缓存数据对象,将缓存数据对象缓存在当前的主用槽位中,形成槽位索引,指向该当前的主用槽位;
当触发缓存数据对象的更新时,数据使用端从数据库加载更新后的配置数据,构造更新后的缓存数据对象,保留当前主用槽位中的缓存数据对象,并将更新后的缓存数据对象缓存在备用槽位中;然后,将当前主用槽位切换为备用槽位,当前备用槽位切换为主用槽位,将槽位索引的指向更新为切换后的当前主用槽位。
优选地,所述主用槽位和备用槽位包括:2个元素的数组。
优选地,在所述数据使用端从数据库加载配置数据之前,进一步包括:配置服务器接收并保存数据使用端发送的注册信息,所述注册信息包括:所述数据使用端的IP地址、通知接收端口号、使用配置数据的名称信息;根据所述注册信息,生成对应的配置数据版本号;将所述配置数据版本号发送给所述数据使用端,所述配置数据版本号包括:配置数据名称和版本号字符串;
所述数据使用端从数据库加载配置数据包括:所述数据使用端根据接收到的所述配置数据版本号,从数据库加载对应的配置数据;
触发缓存数据对象的更新包括:数据变更端向配置服务器发送新的配置数据版本号;配置服务器向所述数据使用端发送更新所述配置数据版本号通知,该通知中携带新的配置数据版本号,触发所述数据使用端开启新的线程;
所述数据使用端从数据库加载更新后的配置数据包括:所述数据使用端接收所述通知,从中获取所述新的配置数据版本号,根据所述新的配置数据版本号,从所述数据库加载新的配置数据。
优选地,向所述数据使用端发送更新所述配置数据版本号通知,包括:
所述配置服务器遍历当前注册的数据使用端,查找使用了所述配置数据的所有数据使用端,向查找到的所有数据使用端发送更新所述配置数据版本号通知。
优选地,所述数据使用端接收所述通知包括:
所述数据使用端启动socket监听,监听通知接收端口用以接收配置服务器发来的所述通知。
优选地,判断所述数据使用端是否完成所述加载新的配置数据,包括:
所述配置服务器接收所述数据使用端发送的所述槽位索引对应的配置信息版本号,与所述配置服务器中存在的所述新的配置信息版本号进行比对,如果一致,则完成所述加载新的配置数据,否则,所述加载新的配置数据失败。
本发明还提供一种数据使用端,包括:
形成单元,用于初始化形成缓存数据对象的主用槽位和备用槽位;
缓存执行单元,用于从外部数据库加载配置数据,构造缓存数据对象,将缓存数据对象缓存在当前的主用槽位中,形成槽位索引,指向该当前的主用槽位;当被触发更新操作时,从外部数据库加载更新后的配置数据,构造更新后的缓存数据对象,并将更新后的缓存数据对象缓存在备用槽位中;
控制单元,用于控制所述缓存执行单元在将更新后的缓存数据对象缓存在备用槽位中时,保留当前主用槽位中的缓存数据对象,在缓存执行单元将将更新后的缓存数据对象缓存在备用槽位中完毕后,将当前主用槽位切换为备用槽位,当前备用槽位切换为主用槽位,将槽位索引的指向更新为切换后的当前主用槽位。
优选地,所述形成单元,用于生成2个元素的数组,作为所述主用槽位和备用槽位。
本发明还提供一种缓存数据的更新系统,包括:前面所述的数据使用端,配置服务器,数据变更端以及数据库,
配置服务器,用于通知所述数据使用端需要加载及更新的配置数据的索引,
数据变更端,用于在数据库配置数据变更后,触发配置服务器通知所述数据使用端更新的配置数据的索引。
优选地,配置服务器包括:
用于接收并保存数据使用端发送的注册信息,所述注册信息包括:所述数据使用端的IP地址、通知接收端口号、使用配置数据的名称信息;
用于根据所述注册信息,生成对应的配置数据版本号;
用于将所述配置数据版本号发送给所述数据使用端,所述配置数据版本号包括:配置数据名称和版本号字符串。
本发明内容提供了一种缓存数据的更新方法、数据使用端和系统,能够达到如下有益效果:
1.保证有可用的缓存数据。数据使用端初始化形成缓存数据对象的主用槽位和备用槽位,当从数据库加载配置数据,构造缓存数据对象,将缓存数据对象缓存在当前的主用槽位中,形成槽位索引,指向该当前的主用槽位,即可直接调用主槽位中的缓存数据使用;当触发缓存数据的更新时,所述数据库使用端保留当前主用槽位中的缓存数据,并将更新的缓存数据对象缓存在备用槽位中,并不会影响当前主槽位中的缓存数据;当缓存数据对象更新过程中或更新失败,数据使用端仍可调用当前主槽位中的缓存数据;当缓存数据对象更新成功后,当前主用槽位切换为备用槽位,当前备用槽位切换为主用槽位,将槽位索引的指向更新为切换后的主用槽位。这样,即使更新过程出错,还可以使用主槽位中的原有版本数据,从而保证有可用的缓存数据。
2.提高业务处理效率。现有技术中,缓存数据更新过程中,需对缓存区域进行锁保护,使得缓存数据更新过程不可用,导致业务处理暂停,而本发明数据使用端初始化形成缓存数据对象的主用槽位和备用槽位,其中,主槽位用于缓存当前业务处理过程中所用的缓存数据,备用槽位用于缓存数据库加载更新后的配置数据,即备用槽位缓存数据更新过程不会影响主槽位中缓存数据的应用,因此,在缓存数据更新过程中或者缓存数据更新失败,业务均可连续处理,从而有效提高了业务处理效率。
3、保证缓存数据及时更新。在本发明实施例中,缓存数据更新通知是由数据变更端发起,即数据变更端更新数据库中配置数据后,经由配置服务器向数据使用端发起缓存数据更新通知,能够保证一旦发生配置数据变更,使用者可以立刻得到通知消息进行缓存更新动作。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供了一种缓存数据的更新方法,数据使用端初始化形成缓存数据对象的主用槽位和备用槽位,该方法可以包括以下步骤:
步骤101:数据使用端从数据库加载配置数据,构造缓存数据对象,将缓存数据对象缓存在当前的主用槽位中,形成槽位索引,指向该当前的主用槽位;
步骤102:当触发缓存数据的更新时,数据使用端从数据库加载更新后的配置数据,构造更新后的缓存数据对象,保留当前主用槽位中的缓存数据,并将更新后的缓存数据对象缓存在备用槽位中;然后,将当前主用槽位切换为备用槽位,当前备用槽位切换为主用槽位,将槽位索引的指向更新为切换后的当前主用槽位。
根据上述实施例,缓存数据的更新时,所述数据库使用端保留当前主用槽位中的缓存数据,并将更新的缓存数据对象缓存在备用槽位中,并不会影响当前主槽位中的缓存数据;当缓存数据对象更新过程中或更新失败,数据使用端仍可调用当前主槽位中的缓存数据,保证了业务处理有可用的缓存数据。
如图2所示,本发明另一实施例提供了一种缓存数据的更新方法,数据变更端通过配置服务器向数据使用端发送更新通知,数据使用端初始化形成缓存数据对象的主用槽位和备用槽位,该方法可以包括以下步骤:
步骤201:配置服务器接收并保存数据使用端发送的注册信息,
所述注册信息包括:所述数据使用端的IP地址、通知接收端口号、使用配置数据的名称信息;
步骤202:所述配置服务器根据所述注册信息,生成对应的配置数据版本号,
所述配置数据版本号包括:配置数据名称和版本号字符串;
步骤203:所述配置服务器将所述配置数据版本号发送给所述数据使用端;
步骤204:所述数据使用端接收所述配置数据版本号,并根据所述配置数据版本号,从数据库加载配置数据构造缓存数据对象;
步骤205:所述配置服务器判断所述数据使用端加载配置数据构造缓存数据对象是否成功,如果是,则执行步骤206,否则,执行步骤207
步骤206:所述配置服务器触发所述数据使用端将所述缓存数据对象存入主缓存对象槽位,并形成一个槽位索引指向所述当前主缓存对象槽位,并接收所述数据使用端更新的信息;
步骤207:所述配置服务器删除所述数据使用端对应的信息;
值得说明的是,本发明中,所述主用槽位和备用槽位是通过2个元素的数据组来实现的;
步骤208:数据变更端发送新的配置数据版本号给所述配置服务器;
在此过程中,数据变更端在完成数据库内的配置数据更新后,生成对应的一个新的配置数据版本号,并将更新的配置数据名称和新的配置数据版本号发送给配置服务器。
所述配置数据名称一般定义为模块名+配置细项名称,其中,模块名为特定的模块名称,如alarm、topo、gis、relation等;配置细项名称为实际配置数据的名称,如alarm_standard_rule、relation_rule、derive_rule等。
步骤209:所述配置服务器接收数据变更端发送的新的配置数据版本号,
即所述配置服务器维护系统内所有配置数据的最新版本号,通过步骤208和步骤209可知,缓存数据更新通知是由数据变更端发起,能够保证一旦发生配置数据变更,使用者可以立刻得到通知消息进行缓存更新动作,保证了缓存数据及时更新。
步骤210:所述配置服务器遍历当前注册的数据使用端,查找使用了所述配置数据的所有数据使用端,向查找到的所有数据使用端发送更新所述配置数据版本号通知;
步骤211:所述数据使用端接手所述更新配置数据版本号通知,开启新的线程,根据所述新的配置数据版本号,从所述数据库加载新的配置数据构造新的缓存数据对象存入备用缓存对象槽位;
在本发明中,本实施例所述数据使用端具有通知接手端口,通过启动socket监听,监听所述通知接收端口用以接收所述配置服务器的数据更新通知,而所述数据使用端根据所述配置数据版本号从数据库中获取配置数据并构造缓存数据对象,则是通过一个回调函数来完成;
步骤212:判断所述数据使用端是否完成所述加载新的配置数据构造新的缓存数据对象存入备用缓存数据对象槽位,如果是,则执行步骤213,否则执行步骤214;
步骤213:备用缓存数据对象槽位成为当前主用缓存数据对象槽位,更新所述槽位索引指向当前主用缓存数据对象槽位;
步骤214:所述槽位索引不变,仍然指向所述主用缓存数据对象槽位。
通过上述实施例可知,本发明中,主槽位用于缓存当前业务处理过程中所用的缓存数据,备用槽位用于缓存数据库加载更新后的配置数据,即备用槽位缓存数据更新过程不会影响主槽位中缓存数据的应用,因此,在缓存数据更新过程中或者缓存数据更新失败,业务均可连续处理,从而有效提高了业务处理效率。
另外,本发明所述配置服务器主要采取请求应答模型,处理数据使用端的注册和更新请求以及配置数据变更端的更新缓存数据请求,处理过程简单。例如:多个数据使用端注册到配置服务器时,配置服务器维护当前所有注册数据使用端形成列表,每个数据使用端保存在配置服务器中的信息包含数据使用端的IP地址、通知消息接收端口号、所缓存配置数据名称及版本号,另外还保存了配置服务器下发的版本号信息及下发版本号更新状态,并在当前注册数据使用者列表中增加相应项。另外,当数据使用端注销时,配置服务器从当前注册数据使用端列表中删除对应的项。
如图3、图4所示,本发明实施例提供了一种缓存数据的数据使用端。数据使用端实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。从硬件层面而言,如图3所示,为本发明实施例所述数据使用端所在设备的一种硬件结构图,除了图3所示的CPU、内存、网络接口、以及非易失性存储器之外,实施例中数据使用端所在的设备通常还可以包括其他硬件,如负责槽位索引转换更新的芯片等等。以软件实现为例,如图4所示,作为一个逻辑意义上的装置,是通过其所在设备的CPU将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。本实施例提供的缓存数据的数据使用端40包括:
形成单元401,用于初始化形成缓存数据对象的主用槽位和备用槽位,
在该过程中,主要是通过生成2个元素的数组来完成;
缓存执行单元402,用于从外部数据库加载配置数据,构造缓存数据对象,将缓存数据对象缓存在当前的主用槽位中,形成槽位索引,指向该当前的主用槽位;当被触发更新操作时,从外部数据库加载更新后的配置数据,构造更新后的缓存数据对象,并将更新后的缓存数据对象缓存在备用槽位中;
控制单元403,用于控制所述缓存执行单元在将更新后的缓存数据对象缓存在备用槽位中时,保留当前主用槽位中的缓存数据,在缓存执行单元将将更新后的缓存数据对象缓存在备用槽位中完毕后,将当前主用槽位切换为备用槽位,当前备用槽位切换为主用槽位,将槽位索引的指向更新为切换后的当前主用槽位。
如图5所示,本发明实施例还提供了一种缓存数据系统,该缓存数据系统包括:数据使用端501,配置服务器502,数据变更端503以及数据库504。
所述配置服务器502,用于通知所述数据使用端需要加载及更新的配置数据的索引;
另外,所述配置服务器,还可用于接收并保存数据使用端发送的注册信息,并根据所述注册信息,生成对应的配置数据版本号,然后,将所述配置数据版本号发送给所述数据使用端;
所述数据变更端503,用于在数据库配置数据变更后,触发配置服务器通知所述数据使用端更新的配置数据的索引。
需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个······”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。