具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本发明实施例提供一种缓存数据更新的方法,如图1所示,包括:
101、业务服务器启动时,向数据库服务器获取并加载需要缓存到所述业务服务器本地缓存的缓存数据和所述缓存数据对应的缓存版本信息表,所述缓存版本信息表包含缓存数据的数据类型和缓存版本信息。
该处的业务服务器可以是负载均衡下的多个服务器,也可以是独立服务的独立业务服务器,具体的本发明实施例对此不进行限定。
业务数据一般存放在数据库服务器中供共用方共同使用,为提高业务数据的访问性能,需要将业务数据加载到业务服务器本地缓存;而将业务数据缓存在业务服务器本地,一般是在业务服务器启动时,向数据库服务器获取并加载在业务服务器的本地缓存中。
当将业务数据加载到业务服务器的本地缓存中后,为保证缓存中的副本数据与数据库中的数据一致,确保业务系统或者产品的客服端的输入与输出的正确性,当数据库中的数据发生变更,缓存有对应数据的业务服务器需要快速更新自己的本地缓存中的数据。本发明实施例通过维护所述缓存数据对应的缓存版本信息表实现缓存数据的更新。具体需要在获取需要缓存数据的同时获取该缓存数据对应的缓存版本信息表,该缓存版本信息表中可以包含缓存数据的数据类型和缓存版本信息。
其中,根据业务的不同对应缓存数据的类型不同,例如缓存数据的类型为字典表、参数表、区域信息等。其中,该缓存版本信息为区分同一类型不同版本的信息,由于版本不同,导致该类型的缓存数据内容不同。该缓存版本信息可以为缓存版本号,该版本号可以有固定的命名方式,如1.a.1版,1.b.1版,也可以用时间进行命名,例如2003版,2015版;也可以是其他任一形式,只要能区分不同内容就可以。
102、所述业务服务器按照预定时间规则查询所述缓存版本信息表,确定不同数据类型的缓存版本信息是否与对应数据在数据库服务器中的数据库版本信息一致。
在将缓存数据以及该缓存数据对应的缓存版本信息表缓存在业务服务器的本地缓存之后,业务服务器按照预定时间规则查询所述缓存版本信息表。其中,该预定时间规则可以为预定周期,也可以为预定时间,也可以为其他形式,具体的本发明实施例对此不进行限制。在具体实施时可以采用启动定时器的方式实现,该定时器可以设定查询的预定时间,例如每天的24时;也可以设定查询的预定周期时长,例如5秒,或者1小时。
由于业务服务器本地缓存中存储的不同数据类型的缓存版本信息,是在业务服务器启动时从数据库服务器获取的,其仅是数据库服务器中数据库版本信息的一个备份,两者应该一致。但是当修改了数据库服务器中的数据及对应的版本信息之后,若业务服务器中的缓存版本信息没有及时修改,则会出现缓存版本信息和数据库版本信息不一致的情况,当不一致时,就要业务服务器及时更新其本地缓存中对应的缓存数据,以保证与数据库服务器中的数据一致。
103、若确定所述缓存版本信息与所述数据库版本信息不一致,则更新所述缓存数据和所述缓存版本信息表。
在更新所述缓存数据和所述缓存版本信息表时,可以更新所述业务服务器中的所有缓存数据,为了提高更新效率也可以更新版本信息不一致的数据,具体的本发明实施例对此不进行限制,可以根据具体需求具体实施。
本发明实施例还提供一种缓存数据更新的方法,如图2所示,该方法包括:
201、数据库服务器生成并保存数据库版本信息表,所述数据库版本信息表包括数据库数据的数据库版本信息和数据类型。
当向数据库服务器写入对应业务的数据时,生成该业务对应的数据库版本信息,并将该数据的数据类型和数据库版本信息存储在数据库版本信息表中,以便后续查询使用。其中,由于缓存版本信息表是数据库版本信息表的副本,关于数据库版本信息表的相关内容可以参考缓存版本信息表的相关说明,此处将不再赘述。
202、在业务服务器启动时,向所述业务服务器发送所述业务服务器需要缓存到所述业务服务器本地缓存的缓存数据和所述缓存数据对应的缓存版本信息表。
在业务服务器启动时,业务服务器会向数据库服务器发送一个获取需要缓存到该业务服务器的数据和该数据对应的缓存版本信息表的获取请求,该数据库服务器接收到该获取请求后,便向所述业务服务器发送所述业务服务器需要缓存到所述业务服务器本地缓存的缓存数据和所述缓存数据对应的缓存版本信息表。
本发明实施例中,业务服务器在缓存数据时,还保存一张记录缓存数据类型和缓存数据对应版本信息的缓存版本信息表;将缓存数据和缓存版本信息表加载到业务服务器的本地缓存后,业务服务器会按照预定时间规则,确定该缓存版本信息表中不同数据类型的缓存版本信息是否与数据库服务器中的数据库版本信息一致,在不一致的情况下,进行缓存数据和缓存版本信息表的更新。与现有技术相比,本发明的整个缓存数据更新仅仅是对缓存版本信息表进行查询,而非对缓存数据进行查询,相比节省了很多业务服务器资源,降低了缓存数据因读出写入导致的错误;当需要进行更新时,是根据查询版本信息表的结果进行的,不用重启业务服务器,相比更新操作简单,并且保证业务服务器的业务正常进行;各个业务服务器各自查询本地的版本信息表,进行本地缓存数据的更新,不用使用其他机制辅助进行,维护成本较低。综上,本发明提供的技术方案能够在保证应用正常访问数据的前提下,使得维护成本和占用资源都较低,并且操作简单。
为了实现业务服务器本地缓存数据的及时更新,所述业务服务器需要按照预定时间规则,确定不同数据类型的缓存版本信息是否与对应数据在数据库服务器中的数据库版本信息一致。本发明实施例中,确定不同数据类型的缓存版本信息是否与对应数据在数据库服务器中的数据库版本信息一致可以采用但不局限于以下的方法实现,该方法如图3所示,包括:
301、所述业务服务器按照预定时间规则向所述数据库服务器发送获取所述缓存数据在数据库中数据库版本信息表的请求。
302、接收所述数据库服务器返回的所述数据库版本信息表,所述数据库版本信息表包括数据库版本信息和数据类型。
303、将所述缓存版本信息表中不同数据类型的缓存版本信息与所述数据库版本信息表中对应的数据库版本信息进行比较。根据比较结果确定所述缓存版本信息与所述数据库版本信息不一致。
304、若所述缓存版本信息低于所述数据库版本信息,则确定所述缓存版本信息与所述数据库版本信息不一致。
所述缓存版本信息低于所述数据库版本信息,说明数据库服务器中的数据进行了更高级别数据的更新,而业务服务器本地缓存中的对应数据还没有更新,需要业务服务器进行对应数据的升级更新。
305、若所述缓存版本信息高于所述数据库版本信息,则确定所述缓存版本信息与所述数据库版本信息不一致。
所述缓存版本信息高于所述数据库版本信息,说明数据库服务器中的数据进行了降级更新,该处业务服务器本地缓存中的对应数据是否也需要降级更新,为保证与数据库数据的对应可以进行降级更新。
306、若所述缓存信息表中不存在所述数据库版本信息,则确定所述缓存版本信息与所述数据库版本信息不一致。
所述缓存信息表中不存在所述数据库版本信息,说明数据库服务器中的数据是一个全新版本的数据,业务服务器本地缓存中并没有该版本的数据,需要进行对应版本数据内容的更新。
如上所述的,在进行业务服务器本地缓存数据的更新时,可以根据需求进行各种形式的更新,该更新包括:
根据所述数据库版本信息表更新所述缓存版本信息表和所述服务器本地的所有缓存数据。
或者根据所述数据库版本信息表更新所述缓存版本信息表,并确定所述缓存版本信息与对应数据的数据库版本信息不一致的数据类型,更新版本信息不一致数据类型对应的缓存数据。其中,当更新版本信息不一致数据类型对应的缓存数据时,更新所述版本信息不一致的数据类型对应的所有缓存数据,也可以所述缓存版本信息表中还包括缓存数据的关键字,同一类型下的数据包括不同关键字的数据,更新所述版本信息不一致并且所述关键字不一致的缓存数据。具体的,本发明实施例对此不进行限制。
以下实施例将结合具体事例阐述各种数据更新方法:
本发明实施例以根据所述数据库版本信息表更新所述缓存版本信息表和所述服务器本地的所有缓存数据为例具体说明,该方法如图4所示,包括:
401、所述业务服务器将所述数据库版本信息表替换为缓存版本信息表。
402、所述业务服务器根据所述数据库版本信息表向所述数据库服务器发送获取缓存数据的请求信息,所述请求信息中包括所述数据库版本信息表中的所有数据类型。
403、数据库服务器接收所述请求,并根据所述请求获取所述请求中包括的所有数据类型对应的数据。
404、数据库服务器将所有数据类型对应的数据返回给该业务服务器。
405、业务服务器接收所述数据库服务器返回的所述数据库版本信息表中的所有数据类型对应的数据。
406、业务服务器将所述数据库版本信息表中的所有数据类型对应的数据替换所述业务服务器本地缓存中的缓存数据。
本发明实施例以根据所述数据库版本信息表更新所述缓存版本信息表和更新所述版本信息不一致的数据类型对应的所有缓存数据为例具体说明,该方法如图5所示,包括:
501、所述业务服务器根据所述数据库版本信息表更新所述缓存版本信息表,并确定所述缓存版本信息与对应数据的数据库版本信息不一致的数据类型。
502、所述业务服务器向所述数据库服务器发送获取缓存数据的请求信息,所述请求信息中包括版本信息不一致的数据类型。
503、数据库服务器接收所述请求,并根据所述请求获取所述请求中包括的版本信息不一致的数据类型对应的数据。
504、数据库服务器将版本信息不一致的数据类型对应的数据返回给该业务服务器。
505、业务服务器接收所述数据库服务器返回的版本信息不一致的数据类型对应的数据。
506、将版本信息不一致的数据类型对应的数据替换所述业务服务器本地缓存中对应的缓存数据。
本发明实施例以根据所述数据库版本信息表更新所述缓存版本信息表和所述版本信息不一致并且所述关键字不一致的缓存数据为例具体说明,该方法如图6所示,包括:
601、所述业务服务器根据所述数据库版本信息表更新所述缓存版本信息表,并确定所述缓存版本信息与对应数据的数据库版本信息不一致的数据类型。
602、所述业务服务器确定版本信息不一致数据类型中所述关键字不一致的关键字。
其中,在确定版本信息不一致数据类型中所述关键字不一致的关键字可以采用但不局限于以下的方法实现,该方法包括:
若原本设置有关键字,则比对缓存中的关键字是否与数据库服务器中的关键字一致,若不一致,则确定为不一致的关键字,该关键字对应的数据需要更新;若原本设置有关键字,但是关键字没有赋值,则查询到对应关键字被赋值,则确定为不一致的关键字,还可以是其他的方式,只要能够区别开关键字对应数据是否发送变化即可,具体的本发明实施例对此不进行限制。
603、所述业务服务器向所述数据库服务器发送获取缓存数据的请求信息,所述请求信息中包括版本信息不一致的数据类型以及所述关键字不一致的关键字。
604、数据库服务器接收所述请求,并根据所述请求获取所述请求中包括的版本信息不一致的数据类型以及所述关键字不一致的关键字对应的数据。
605、数据库服务器将版本信息不一致的数据类型以及所述关键字不一致的关键字对应的数据返回给该业务服务器。
606、业务服务器接收所述数据库服务器返回的版本信息不一致并且所述关键字不一致的关键字对应的数据。
607、业务服务器将版本信息不一致并且所述关键字不一致的关键字对应的数据替换所述业务服务器本地缓存中对应的缓存数据。
进一步需要说明的是,存储在数据库服务器中的数据,也会根据需求不定时的更新,为实现业务服务器缓存数据的更新,本发明在将数据存入数据库服务器之后,还提供如下的方法,如图7所示,该方法具体为:
701、监控数据库服务器中的数据是否有更新;若有更新,执行702;
702、将更新的数据替换数据库服务器中原有的数据,并生成所述更新的数据对应的数据库版本信息。
703、更新数据库版本信息表中的数据库版本信息。
另外,不同类型数据包含很多不同关键字对应的数据,在更新数据库服务器中的数据时,也有可能仅更新同一类型数据下的部分数据,当更新同一数据类型下的部分关键字数据时,对该部分数据的关键字进行标注,并更新所述数据库版本信息表,以便业务服务器进行查询并更新。
基于上述方法实施例,本发明实施例提供一种业务服务器,如图8所示,该业务服务器包括:
加载单元81,用于在所述业务服务器启动时,向数据库服务器获取并加载需要缓存到所述业务服务器本地缓存的缓存数据和所述缓存数据对应的缓存版本信息表,所述缓存版本信息表包含缓存数据的数据类型和缓存版本信息;
确定单元82,用于按照预定时间规则,确定不同数据类型的缓存版本信息是否与对应数据在数据库服务器中的数据库版本信息一致;
更新单元83,用于在确定所述缓存版本信息与所述数据库版本信息不一致时,更新所述缓存数据和所述缓存版本信息表。
进一步的,如图9所示,所述确定单元82包括:
发送模块821,用于按照预定时间规则向所述数据库服务器发送获取所述缓存数据在数据库中数据库版本信息表的请求;
接收模块822,用于接收所述数据库服务器返回的所述数据库版本信息表,所述数据库版本信息表包括数据库版本信息和数据类型;
比较模块823,用于将所述缓存版本信息表中不同数据类型的缓存版本信息与所述数据库版本信息表中对应的数据库版本信息进行比较;
确定模块824,用于在所述缓存版本信息低于所述数据库版本信息时,确定所述缓存版本信息与所述数据库版本信息不一致;
所述确定模块824还用于,在所述缓存版本信息高于所述数据库版本信息时,确定所述缓存版本信息与所述数据库版本信息不一致;
所述确定模块824还用于,在所述缓存信息表中不存在所述数据库版本信息时,确定所述缓存版本信息与所述数据库版本信息不一致。
进一步的,如图10所示,所述更新单元83包括:
第一更新模块831,用于根据所述数据库版本信息表更新所述缓存版本信息表和所述服务器本地的所有缓存数据;
和/或第二更新模块832,用于根据所述数据库版本信息表更新所述缓存版本信息表,并确定所述缓存版本信息与对应数据的数据库版本信息不一致的数据类型,更新版本信息不一致数据类型对应的缓存数据。
其中,所述第一更新模块831用于:将所述数据库版本信息表替换为缓存版本信息表,并根据所述数据库版本信息表向所述数据库服务器发送获取缓存数据的请求信息,所述请求信息中包括所述数据库版本信息表中的所有数据类型;接收所述数据库服务器返回的所述数据库版本信息表中的所有数据类型对应的数据;将所述数据库版本信息表中的所有数据类型对应的数据替换所述业务服务器本地缓存中的缓存数据。
所述第二更新模块832用于:更新所述版本信息不一致的数据类型对应的所有缓存数据;或者所述缓存版本信息表中还包括缓存数据的关键字,同一类型下的数据包括不同关键字的数据,更新所述版本信息不一致并且所述关键字不一致的缓存数据。
当所述第二更新模块832用于更新所述版本信息不一致的数据类型对应的所有缓存数据时,可以采用但不局限于以下的方式实现,该方式包括:向所述数据库服务器发送获取缓存数据的请求信息,所述请求信息中包括版本信息不一致的数据类型;接收所述数据库服务器返回的版本信息不一致的数据类型对应的数据;将版本信息不一致的数据类型对应的数据替换所述业务服务器本地缓存中对应的缓存数据。
当所述第二更新模块832用于更新所述版本信息不一致并且所述关键字不一致的缓存数据时,可以采用但不局限于以下的方式实现,该方式包括:确定所述关键字不一致的关键字;更新所述版本信息不一致并且所述关键字不一致的缓存数据。
其中,更新所述版本信息不一致并且所述关键字不一致的缓存数据包括:所述业务服务器向所述数据库服务器发送获取缓存数据的请求信息,所述请求信息中包括版本信息不一致的数据类型以及所述关键字不一致的关键字;接收所述数据库服务器返回的版本信息不一致并且所述关键字不一致的关键字对应的数据;将版本信息不一致并且所述关键字不一致的关键字对应的数据替换所述业务服务器本地缓存中对应的缓存数据。
本发明实施例还提供一种数据库服务器,如图11所示,该数据库服务器包括:
生成单元91,用于生成并保存数据库版本信息表,所述数据库版本信息表包括数据库数据的数据库版本信息和数据类型;
第一发送单元92,用于在业务服务器启动时,向所述业务服务器发送所述业务服务器需要缓存到所述业务服务器本地缓存的缓存数据和所述缓存数据对应的缓存版本信息表。
进一步的,如图12所示,该数据库服务器,还包括:
监控单元93,用于监控数据库服务器中的数据是否有更新;
更新单元94,用于在监控到有更新,将更新的数据替换数据库服务器中原有的数据
所述生成单元91还用于,生成所述更新的数据对应的数据库版本信息;
所述更新单元94还用于,更新数据库版本信息表中的数据库版本信息。
进一步的,如图13所示,该数据库服务器还包括:
接收单元95,用于接收业务服务器发送的获取所述缓存数据在数据库中的数据库版本信息表的请求;
第二发送单元96,用于根据所述请求向所述业务服务器返回的所述数据库版本信息表,所述数据库版本信息表包括:所述数据库版本信息和数据类型。
进一步的,所述数据库版本信息表中还包括数据的关键字,同一类型下的数据包括不同关键字的数据;当更新同一数据类型下的部分关键字数据时,所述更新单元94还用于,对该部分数据的关键字进行标注,并更新所述数据库版本信息表。
本发明实施例还提供一种缓存数据更新的系统,如图14所示。该系统包括如上所述的数据库服务器1001和多个如上所述的业务服务器1002。所述多个业务服务器共用所述数据库服务器1001。
本发明实施例中,业务服务器在缓存数据时,还保存一张记录缓存数据类型和缓存数据对应版本信息的缓存版本信息表;将缓存数据和缓存版本信息表加载到业务服务器的本地缓存后,业务服务器会按照预定时间规则,确定该缓存版本信息表中不同数据类型的缓存版本信息是否与数据库服务器中的数据库版本信息是否一致,在不一致的情况下,进行缓存数据和缓存版本信息表的更新。与现有技术相比,本发明的整个缓存数据更新仅仅是对缓存版本信息表进行查询,而非对缓存数据进行查询,相比节省了很多业务服务器资源,降低了缓存数据因读出写入导致的错误;当需要进行更新时,是根据查询版本信息表的结果进行的,不用重启业务服务器,相比更新操作简单,并且保证业务服务器的业务正常进行;各个业务服务器各自查询本地的版本信息表,进行本地缓存数据的更新,不用使用其他机制辅助进行,维护成本较低。综上,本发明提供的技术方案能够在保证应用正常访问数据的前提下,使得维护成本和占用资源都较低,并且操作简单。
所述业务服务器包括处理器和存储器,上述加载单元、确定单元、更新单元等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能;以及所述数据库服务器包括处理器和存储器,上述生成单元、第一发送单元、监控单元、更新单元、接收单元、第二发送单元等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来实现在保证应用正常访问数据的前提下,使得维护成本和占用资源都较低,并且操作简单。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM),存储器包括至少一个存储芯片。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序代码:业务服务器启动时,向数据库服务器获取并加载需要缓存到所述业务服务器本地缓存的缓存数据和所述缓存数据对应的缓存版本信息表,所述缓存版本信息表包含缓存数据的数据类型和缓存版本信息;所述业务服务器按照预定时间规则,确定不同数据类型的缓存版本信息是否与对应数据在数据库服务器中的数据库版本信息一致;若确定所述缓存版本信息与所述数据库版本信息不一致,则更新所述缓存数据和所述缓存版本信息表。数据库服务器生成并保存数据库版本信息表,所述数据库版本信息表包括数据库数据的数据库版本信息和数据类型;在业务服务器启动时,向所述业务服务器发送所述业务服务器需要缓存到所述业务服务器本地缓存的缓存数据和所述缓存数据对应的缓存版本信息表。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的图表中图形的显示方法、装置、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。