缓存查询方法、装置和电子设备与流程

文档序号:20264384发布日期:2020-04-03 18:12阅读:149来源:国知局

技术领域
:】本说明书涉及互联网
技术领域
:,尤其涉及一种缓存查询方法、装置和电子设备。
背景技术
::现有相关技术中,合约系统接收到上游的业务系统发送的合约查询请求之后,会根据合约查询请求在缓存中进行查询,然后将查询到的合约返回上述业务系统。现有的合约系统采用一级缓存模式,键(key)为查询索引,查询索引可以根据业务系统发送的合约查询请求生成,key对应的键值(value)为查询内容,这种一级缓存模式,一般采用多内容多副本的缓存方式,占用的缓存空间较大。技术实现要素:本说明书实施例提供了一种缓存查询方法、装置和电子设备,以实现通过内容单副本和多级缓存的方式,降低缓存的占用空间。第一方面,本说明书实施例提供一种缓存查询方法,包括:接收业务系统发送的查询请求,所述查询请求是所述业务系统根据二级缓存的查询索引维度生成的,所述查询请求包括二级查询索引和查询条件;根据所述二级查询索引,在所述二级缓存中进行查询;如果所述二级缓存中存在所述二级查询索引,并且所述二级查询索引处于有效状态,则获得所述二级查询索引对应的二级缓存数据;所述二级查询索引对应的二级缓存数据中包括一级查询索引和所述一级查询索引对应的业务属性;将所述查询请求中的查询条件与所述一级查询索引对应的业务属性进行匹配,获得与所述查询条件匹配的业务属性,并获得所述匹配的业务属性对应的一级查询索引;根据获得的一级查询索引在一级缓存中进行查询,获得与所述一级查询索引一一对应的一级缓存数据;将与所述一级查询索引一一对应的一级缓存数据作为所述查询请求对应的查询结果,发送给所述业务系统。其中一种可能的实现方式中,所述根据所述二级查询索引,在二级缓存中进行查询之后,还包括:如果所述二级缓存中不存在所述二级查询索引,或者所述二级缓存中存在所述二级查询索引,但所述二级查询索引处于失效状态,则根据所述二级查询索引在数据库中进行查找,获得所述二级查询索引对应的数据、所述数据对应的业务属性和查询属性;将所述查询请求携带的查询条件与所述业务属性进行匹配,获得与所述查询条件匹配的业务属性,并获得所述匹配的业务属性对应的数据;将所述匹配的业务属性对应的数据作为所述查询请求对应的查询结果,发送给所述业务系统。其中一种可能的实现方式中,所述方法还包括:当所述二级缓存中不存在所述二级查询索引时,在根据所述二级查询索引在数据库中进行查找,获得所述二级查询索引对应的数据、所述数据对应的业务属性和查询属性之后,以所述二级查询索引为键,以所述数据对应的业务属性和查询属性为键值,在所述二级缓存中建立二级查询索引,并将建立的二级查询索引的状态设置为有效;将所述查询属性与所述一级缓存中对应的一级查询索引进行对比,获得所述查询属性中存在,而对应的一级查询索引中不存在的新增查询属性;以所述新增查询属性为键,以所述新增查询属性所对应的数据为键值,在所述一级缓存中新增一级查询索引。其中一种可能的实现方式中,所述方法还包括:接收业务系统发送的更新请求;根据所述更新请求确定待更新的二级查询索引;将所述待更新的二级查询索引的状态设置为失效;在将所述更新请求所请求的数据在数据库中更新完毕之后,删除状态设置为失效的二级查询索引。其中一种可能的实现方式中,所述将所述待更新的二级查询索引的状态设置为失效之后,还包括:将状态设置为失效的二级查询索引的失效时长设置为预定时长;在删除状态设置为失效的二级查询索引的过程中,如果所述状态设置为失效的二级查询索引删除失败,则在经过所述预定时长之后,自动清除所述状态设置为失效的二级查询索引。第二方面,本说明书实施例提供一种缓存查询装置,包括:接收模块,用于接收业务系统发送的查询请求,所述查询请求是所述业务系统根据二级缓存的查询索引维度生成的,所述查询请求包括二级查询索引和查询条件;查询模块,用于根据所述二级查询索引,在所述二级缓存中进行查询;获得模块,用于当所述二级缓存中存在所述二级查询索引,并且所述二级查询索引处于有效状态时,获得所述二级查询索引对应的二级缓存数据;所述二级查询索引对应的二级缓存数据中包括一级查询索引和所述一级查询索引对应的业务属性;匹配模块,用于将所述查询请求中的查询条件与所述一级查询索引对应的业务属性进行匹配,获得与所述查询条件匹配的业务属性,并获得所述匹配的业务属性对应的一级查询索引;所述查询模块,还用于根据所述匹配模块获得的一级查询索引在一级缓存中进行查询,获得与所述一级查询索引一一对应的一级缓存数据;发送模块,用于将与所述一级查询索引一一对应的一级缓存数据作为所述查询请求对应的查询结果,发送给所述业务系统。其中一种可能的实现方式中,所述查询模块,还用于在根据所述二级查询索引,在二级缓存中进行查询之后,如果所述二级缓存中不存在所述二级查询索引,或者所述二级缓存中存在所述二级查询索引,但所述二级查询索引处于失效状态,则根据所述二级查询索引在数据库中进行查找,获得所述二级查询索引对应的数据、所述数据对应的业务属性和查询属性;所述匹配模块,还用于将所述查询请求携带的查询条件与所述业务属性进行匹配,获得与所述查询条件匹配的业务属性,并获得所述匹配的业务属性对应的数据;所述发送模块,还用于将所述匹配的业务属性对应的数据作为所述查询请求对应的查询结果,发送给所述业务系统。其中一种可能的实现方式中,所述装置还包括:建立模块,用于当所述二级缓存中不存在所述二级查询索引时,在所述查询模块根据所述二级查询索引在数据库中进行查找,获得所述二级查询索引对应的数据、所述数据对应的业务属性和查询属性之后,以所述二级查询索引为键,以所述数据对应的业务属性和查询属性为键值,在所述二级缓存中建立二级查询索引,并将建立的二级查询索引的状态设置为有效;对比模块,用于将所述查询属性与所述一级缓存中对应的一级查询索引进行对比,获得所述查询属性中存在,而对应的一级查询索引中不存在的新增查询属性;所述建立模块,还用于以所述新增查询属性为键,以所述新增查询属性所对应的数据为键值,在所述一级缓存中新增一级查询索引。其中一种可能的实现方式中,所述装置还包括:确定模块、设置模块和删除模块;所述接收模块,还用于接收业务系统发送的更新请求;所述确定模块,用于根据所述接收模块接收的更新请求确定待更新的二级查询索引;所述设置模块,用于将所述待更新的二级查询索引的状态设置为失效;所述删除模块,用于在将所述更新请求所请求的数据在数据库中更新完毕之后,删除状态设置为失效的二级查询索引。其中一种可能的实现方式中,所述设置模块,还用于在将所述待更新的二级查询索引的状态设置为失效之后,将状态设置为失效的二级查询索引的失效时长设置为预定时长;所述删除模块,还用于在删除状态设置为失效的二级查询索引的过程中,当所述状态设置为失效的二级查询索引删除失败时,在经过所述预定时长之后,自动清除所述状态设置为失效的二级查询索引。第三方面,本说明书实施例提供一种电子设备,包括:至少一个处理器;以及与所述处理器通信连接的至少一个存储器,其中:所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如上所述的方法。第四方面,本说明书实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如上所述的方法。以上技术方案中,接收业务系统发送的查询请求,上述查询请求是业务系统根据二级缓存的查询索引维度生成的,上述查询请求包括二级查询索引和查询条件,然后根据上述二级查询索引,在二级缓存中进行查询;如果上述二级缓存中存在二级查询索引,并且上述二级查询索引处于有效状态,则获得二级查询索引对应的二级缓存数据;上述二级查询索引对应的二级缓存数据中包括一级查询索引和上述一级查询索引对应的业务属性;将上述查询请求中的查询条件与上述一级查询索引对应的业务属性进行匹配,获得与上述查询条件匹配的业务属性,并获得上述匹配的业务属性对应的一级查询索引;然后,根据获得的一级查询索引在一级缓存中进行查询,获得与上述一级查询索引一一对应的一级缓存数据;最后将与一级查询索引一一对应的一级缓存数据作为上述查询请求对应的查询结果,发送给业务系统。由此可见,本说明书实施例采用二级缓存模型,在二级缓存中存储各种维度的二级查询索引,二级查询索引占用的存储空间很小;一级缓存中只需存储一份一级缓存数据,因此一级缓存采用的是内容单副本的存储方式,从而可以实现通过多级缓存和内容单副本的缓存方式,降低缓存的占用空间。【附图说明】为了更清楚地说明本说明书实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。图1为本说明书缓存查询方法一个实施例的流程图;图2为本说明书缓存查询方法中二级缓存一个实施例的示意图;图3为本说明书缓存查询方法中一级缓存一个实施例的示意图;图4为本说明书缓存查询方法另一个实施例的流程图;图5为本说明书缓存查询方法中缓存刷新机制一个实施例的示意图;图6为本说明书缓存查询装置一个实施例的结构示意图;图7为本说明书缓存查询装置另一个实施例的结构示意图;图8为本说明书电子设备一个实施例的结构示意图。【具体实施方式】为了更好的理解本说明书的技术方案,下面结合附图对本说明书实施例进行详细描述。应当明确,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本说明书保护的范围。在本说明书实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。现有的合约系统采用一级缓存模式,键(key)为查询索引,查询索引可以根据业务系统发送的合约查询请求生成,key对应的键值(value)为查询内容,这种一级缓存模式,存在以下问题:1、缓存容量问题:现有的一级缓存模式中,查询索引(key)与value一一对应,因此查询索引key的维度越多,对应的value越多,因此现有的一级缓存模式采用的是多内容多副本的存储方式,随着查询索引key的增加,value也需要相应增加,因此一级缓存模式会占用大量的存储空间;2、时效性问题:异步刷新方式有延迟,导致查询到的缓存内容不是数据库中最新的数据;3、一致性问题:如果有多个查询索引,存在多个key,而每个key都有自己对应的value,这样在采用异步模式刷新缓存内容时,就会导致不同的key对应的value不同,从而产生一致性问题。具体来说,现有技术中存在时效性和一致性问题的原因在于:业务系统请求对数据库中的数据进行数据更新操作(例如:对数据进行增加、删除或修改等操作)时,会清空缓存,然后在数据更新操作完毕之后,将更新后的数据刷新到缓存中;另外,缓存接收到业务系统发送的查询请求之后,如果这时正在对数据库中的数据进行数据更新操作,缓存为空,缓存就会从数据库中查询上述查询请求所请求的数据,然后将查询到的数据刷新到缓存中。这样,假设数据更新操作在查询操作之前完成,数据更新操作先将更新后的数据刷新到了缓存中,在缓存查询到数据之后,又会将查询到的数据刷新到缓存中,这样就会覆盖掉数据更新操作刷新到缓存中的数据,但是根据查询请求从数据库中查询到的数据是数据库更新前的数据,从而导致最终刷新到缓存中的数据并不是数据库更新之后的数据,存在时效性和一致性的问题。为解决以上问题,本说明书实施例提供一种缓存查询方法。图1为本说明书缓存查询方法一个实施例的流程图,如图1所示,上述缓存查询方法可以包括:步骤102,接收业务系统发送的查询请求,上述查询请求是业务系统根据二级缓存的查询索引维度生成的,上述查询请求包括二级查询索引和查询条件。其中,上述业务系统可以为合约系统的上游系统;上述查询请求是业务系统根据二级缓存的查询索引维度生成的,具体地,参见图2,图2为本说明书缓存查询方法中二级缓存一个实施例的示意图。如图2所示,二级缓存的查询索引维度可以为“签约主体”、“签约主体+产品码”或合约号;举例来说,假设二级缓存的查询索引维度为合约号,那么业务系统生成的查询请求中就包括合约号和查询条件。上述查询条件可以为时间或版本等信息,举例来说,上述查询请求中可以携带需要查询的合约的合约号,以及需要查询的合约的时间范围,例如2019年7月1日~7月31日之间生成的合约,这个需要查询的合约的时间范围即为上述查询条件。步骤104,根据上述二级查询索引,在二级缓存中进行查询。步骤106,如果二级缓存中存在上述二级查询索引,并且上述二级查询索引处于有效状态,则获得上述二级查询索引对应的二级缓存数据。具体地,上述二级查询索引对应的二级缓存数据中包括一级查询索引和上述一级查询索引对应的业务属性;参见图2,图2中右侧灰色方框中示出的“a_1、a_2、……”为一级查询索引,一级查询索引对应的业务属性在图2中未示出,一级查询索引对应的业务属性可以包括一级查询索引所对应数据的生成时间和/或状态等信息。以二级缓存的查询索引维度为合约号为例,参见图2,当二级查询索引为“合约a”时,上述二级查询索引对应的二级缓存数据包括“a_1、a_2和a_3”,还可以包括a_1所对应合约的生成时间、a_2所对应合约的生成时间,以及a_3所对应合约的生成时间。步骤108,将上述查询请求中的查询条件与一级查询索引对应的业务属性进行匹配,获得与上述查询条件匹配的业务属性,并获得上述匹配的业务属性对应的一级查询索引。如上所述,上述查询条件可以为时间或版本等信息,举例来说,上述查询请求中可以携带合约号,以及需要查询的合约的时间范围,例如2019年7月1日~7月31日之间生成的合约,这个需要查询的合约的时间范围即为上述查询条件。在获得上述二级查询索引对应的二级缓存数据之后,可以将上述查询请求中的查询条件与一级查询索引对应的业务属性进行匹配,获得与上述查询条件匹配的业务属性,并获得上述匹配的业务属性对应的一级查询索引。以查询条件为需要查询的合约的时间范围为例,假设上述查询条件为2019年7月1日~7月31日之间生成的合约,那么可以将上述查询条件与一级查询索引对应的业务属性(合约的生成时间)进行匹配,获得与上述查询条件匹配的业务属性,进而获得上述匹配的业务属性对应的一级查询索引。步骤110,根据获得的一级查询索引在一级缓存中进行查询,获得与上述一级查询索引一一对应的一级缓存数据。具体地,参见图3,图3为本说明书缓存查询方法中一级缓存一个实施例的示意图,从图3中可以看出,一级缓存中,一级查询索引(key)与一级缓存数据(value)是一一对应的,一级缓存数据为单副本,即一级缓存中只需保存一份缓存数据。由于缓存数据占用的存储空间比较大,一般在10k左右,因此采用内容单副本的存储方式可以极大的降低缓存的占用空间。步骤112,将与上述一级查询索引一一对应的一级缓存数据作为上述查询请求对应的查询结果,发送给上述业务系统。上述缓存查询方法中,接收业务系统发送的查询请求,上述查询请求是业务系统根据二级缓存的查询索引维度生成的,上述查询请求包括二级查询索引和查询条件,然后根据上述二级查询索引,在二级缓存中进行查询;如果上述二级缓存中存在二级查询索引,并且上述二级查询索引处于有效状态,则获得二级查询索引对应的二级缓存数据;上述二级查询索引对应的二级缓存数据中包括一级查询索引和上述一级查询索引对应的业务属性;将上述查询请求中的查询条件与上述一级查询索引对应的业务属性进行匹配,获得与上述查询条件匹配的业务属性,并获得上述匹配的业务属性对应的一级查询索引;然后,根据获得的一级查询索引在一级缓存中进行查询,获得与上述一级查询索引一一对应的一级缓存数据;最后将与一级查询索引一一对应的一级缓存数据作为上述查询请求对应的查询结果,发送给业务系统。由此可见,上述缓存查询方法采用二级缓存模型,在二级缓存中存储各种维度的二级查询索引,二级查询索引占用的存储空间很小;一级缓存中只需存储一份一级缓存数据,因此一级缓存采用的是内容单副本的存储方式,从而可以实现通过多级缓存和内容单副本的缓存方式,降低缓存的占用空间。图4为本说明书缓存查询方法另一个实施例的流程图,如图4所示,本说明书图1所示实施例中,步骤104之后,还可以包括:步骤402,如果上述二级缓存中不存在二级查询索引,或者上述二级缓存中存在二级查询索引,但上述二级查询索引处于失效状态,则根据上述二级查询索引在数据库中进行查找,获得上述二级查询索引对应的数据、上述数据对应的业务属性和查询属性。具体地,在合约系统接收到业务系统发送的更新请求之后,会根据上述更新请求确定待更新的二级查询索引,然后将上述待更新的二级查询索引的状态设置为失效,并删除状态设置为失效的二级查询索引;因此,如果根据二级查询索引,在二级缓存中进行查询之后,发现上述二级缓存中不存在上述二级查询索引,或者上述二级缓存中存在上述二级查询索引,但上述二级查询索引处于失效状态,那就说明,上述二级查询索引对应的数据正在被更新,这时,需要降级在数据库中进行查询,获取上述二级查询索引对应的数据、上述数据对应的业务属性和查询属性。其中,上述数据对应的业务属性可以包括数据的生成时间和/或状态等信息,上述数据对应的查询属性可以包括上述数据的标识等可以作为查询索引的属性,例如:a_1或a_2。步骤404,将上述查询请求携带的查询条件与上述业务属性进行匹配,获得与上述查询条件匹配的业务属性,并获得上述匹配的业务属性对应的数据。举例来说,二级查询索引为“合约号a”,根据二级查询索引在数据库中进行查询,可以查询到合约号a对应的所有版本的合约、每份合约的生成时间和每份合约对应的标识(a_1、a_2或a_3)。假设查询请求中携带的查询条件为查询2019年7月1日~7月31日之间生成的合约,那么就可以将每份合约的生成时间与上述查询条件进行匹配,获取在2019年7月1日~7月31日之间的生成时间,进而获取上述生成时间对应的合约。步骤406,将上述匹配的业务属性对应的数据作为上述查询请求对应的查询结果,发送给上述业务系统。进一步地,当上述二级缓存中不存在上述二级查询索引时,步骤401之后,还可以包括:步骤408,以上述二级查询索引为键,以上述数据对应的业务属性和查询属性为键值,在二级缓存中建立二级查询索引,并将建立的二级查询索引的状态设置为有效。参见图5,图5为本说明书缓存查询方法中缓存刷新机制一个实施例的示意图。在图5所示的索引重建过程中,假设二级查询索引为“xxx_ar”,根据上述二级查询索引在数据库中进行查询,可以获取上述二级查询索引对应的数据、上述数据的查询属性和业务属性,其中,上述数据的查询属性包括:“ar_1”、“ar_2”和“ar_3”;上述数据的业务属性可以包括ar_1对应的合约的生成时间和状态、ar_2对应的合约的生成时间和状态,以及ar_3对应的合约的生成时间和状态,上述数据的业务属性在图5中未示出。这样,可以“xxx_ar”为键,以“ar_1”、“ar_2”和“ar_3”,以及上述数据对应的业务属性为键值,在二级缓存中建立二级查询索引,并将建立的二级查询索引的状态设置为有效,如图5中所示的“key=xxx_arvalue=ar_1,ar_2,ar_3status=valid”即为重新建立的二级查询索引。步骤410,将上述查询属性与一级缓存中对应的一级查询索引进行对比,获得上述查询属性中存在,而对应的一级查询索引中不存在的新增查询属性。步骤412,以上述新增查询属性为键,以上述新增查询属性所对应的数据为键值,在一级缓存中新增一级查询索引。仍参见图5中的索引重建过程,上述数据的查询属性包括:“ar_1”、“ar_2”和“ar_3”,一级缓存中对应的一级查询索引在二级查询索引重新建立之前仅包括“ar_1”和“ar_2”,因此新增查询属性为“ar_3”,以“ar_3”为键,以ar_3对应的合约为键值,在一级缓存中新增一级查询索引,如图5所示的“key=ar_3value=context_xxx3”即为新增的一级查询索引。也就是说,本实施例中,如果一级缓存中的缓存内容发生变更,不会对历史内容做修改,而是新生成一条一级查询索引。下面对图5中的缓存刷新过程进行介绍,如图5所示,本说明书实施例提供的缓存查询方法中对缓存进行刷新的过程可以包括:步骤502,接收业务系统发送的更新请求。步骤504,根据上述更新请求确定待更新的二级查询索引,将上述待更新的二级查询索引的状态设置为失效。步骤506,将上述更新请求所请求的数据在数据库中更新完毕。步骤508,向业务系统返回更新成功的响应。步骤510,删除状态设置为失效的二级查询索引。从图5中可以看出,在接收业务系统发送的更新请求之前,二级缓存中的二级查询索引的状态为有效,在接收到业务系统发送的更新请求之后,首先将二级查询索引的状态设置为失效,在将上述更新请求所请求的数据在数据库中更新完毕之后,向业务系统返回更新成功的响应,并将状态设置为失效的二级查询索引删除。之后,如果接收到相应维度的业务查询请求,合约系统根据上述业务查询请求中携带的二级查询索引在二级缓存中进行查询,会发现二级缓存中不存在上述二级查询索引,这时会触发合约系统按照步骤401和步骤404~步骤406提供的方法重建二级查询索引,并新增一级查询索引。也就是说,本实施例中,数据更新操作并不会触发缓存的刷新,而是在数据更新完毕之后,采用业务查询请求触发的方式,对缓存进行刷新,从而保证了缓存的时效性和一致性,又尽可能地降低了同步缓存操作对业务系统的耗时影响。本实施例中,步骤504之后,还可以将状态设置为失效的二级查询索引的失效时长设置为预定时长;然后在删除状态设置为失效的二级查询索引的过程中,如果上述状态设置为失效的二级查询索引删除失败,则在经过上述预定时长之后,自动清除上述状态设置为失效的二级查询索引。其中,上述预定时长可以在具体实现时,根据系统性能和/或实现需求等自行设定,本实施例对上述预定时长的长短不作限定。图6为本说明书缓存查询装置一个实施例的结构示意图,本实施例中的缓存查询装置可以作为电子设备,或电子设备的一部分实现本说明书实施例提供的缓存查询方法。如图6所示,上述缓存查询装置可以包括:接收模块61、查询模块62、获得模块63、匹配模块64和发送模块65;其中,接收模块61,用于接收业务系统发送的查询请求,上述查询请求是业务系统根据二级缓存的查询索引维度生成的,上述查询请求包括二级查询索引和查询条件;其中,上述业务系统可以为合约系统的上游系统;上述查询请求是业务系统根据二级缓存的查询索引维度生成的,具体地,如图2所示,二级缓存的查询索引维度可以为“签约主体”、“签约主体+产品码”或合约号;举例来说,假设二级缓存的查询索引维度为合约号,那么业务系统生成的查询请求中就包括合约号和查询条件。上述查询条件可以为时间或版本等信息,举例来说,上述查询请求中可以携带需要查询的合约的合约号,以及需要查询的合约的时间范围,例如2019年7月1日~7月31日之间生成的合约,这个需要查询的合约的时间范围即为上述查询条件。查询模块62,用于根据上述二级查询索引,在二级缓存中进行查询。获得模块63,用于当二级缓存中存在上述二级查询索引,并且上述二级查询索引处于有效状态时,获得上述二级查询索引对应的二级缓存数据;上述二级查询索引对应的二级缓存数据中包括一级查询索引和上述一级查询索引对应的业务属性;参见图2,图2中右侧灰色方框中示出的“a_1、a_2、……”为一级查询索引,一级查询索引对应的业务属性在图2中未示出,一级查询索引对应的业务属性可以包括一级查询索引所对应数据的生成时间和/或状态等信息。以二级缓存的查询索引维度为合约号为例,参见图2,当二级查询索引为“合约a”时,上述二级查询索引对应的二级缓存数据包括“a_1、a_2和a_3”,还可以包括a_1所对应合约的生成时间、a_2所对应合约的生成时间,以及a_3所对应合约的生成时间。匹配模块64,用于将上述查询请求中的查询条件与上述一级查询索引对应的业务属性进行匹配,获得与上述查询条件匹配的业务属性,并获得上述匹配的业务属性对应的一级查询索引;如上所述,上述查询条件可以为时间或版本等信息,举例来说,上述查询请求中可以携带合约号,以及需要查询的合约的时间范围,例如2019年7月1日~7月31日之间生成的合约,这个需要查询的合约的时间范围即为上述查询条件。在获得上述二级查询索引对应的二级缓存数据之后,匹配模块64可以将上述查询请求中的查询条件与一级查询索引对应的业务属性进行匹配,获得与上述查询条件匹配的业务属性,并获得上述匹配的业务属性对应的一级查询索引。以查询条件为需要查询的合约的时间范围为例,假设上述查询条件为2019年7月1日~7月31日之间生成的合约,那么匹配模块64可以将上述查询条件与一级查询索引对应的业务属性(合约的生成时间)进行匹配,获得与上述查询条件匹配的业务属性,进而获得上述匹配的业务属性对应的一级查询索引。查询模块62,还用于根据匹配模块64获得的一级查询索引在一级缓存中进行查询,获得与上述一级查询索引一一对应的一级缓存数据;具体地,参见图3,一级缓存中,一级查询索引(key)与一级缓存数据(value)是一一对应的,一级缓存数据为单副本,即一级缓存中只需保存一份缓存数据。由于缓存数据占用的存储空间比较大,一般在10k左右,因此采用内容单副本的存储方式可以极大的降低缓存的占用空间。发送模块65,用于将与上述一级查询索引一一对应的一级缓存数据作为上述查询请求对应的查询结果,发送给业务系统。上述缓存查询装置中,接收模块61接收业务系统发送的查询请求,上述查询请求是业务系统根据二级缓存的查询索引维度生成的,上述查询请求包括二级查询索引和查询条件,然后查询模块62根据上述二级查询索引,在二级缓存中进行查询;如果上述二级缓存中存在二级查询索引,并且上述二级查询索引处于有效状态,则获得模块63获得二级查询索引对应的二级缓存数据;上述二级查询索引对应的二级缓存数据中包括一级查询索引和上述一级查询索引对应的业务属性;匹配模块64将上述查询请求中的查询条件与上述一级查询索引对应的业务属性进行匹配,获得与上述查询条件匹配的业务属性,并获得上述匹配的业务属性对应的一级查询索引;然后,查询模块62根据获得的一级查询索引在一级缓存中进行查询,获得与上述一级查询索引一一对应的一级缓存数据;最后发送模块65将与一级查询索引一一对应的一级缓存数据作为上述查询请求对应的查询结果,发送给业务系统。由此可见,上述缓存查询方法采用二级缓存模型,在二级缓存中存储各种维度的二级查询索引,二级查询索引占用的存储空间很小;一级缓存中只需存储一份一级缓存数据,因此一级缓存采用的是内容单副本的存储方式,从而可以实现通过多级缓存和内容单副本的缓存方式,降低缓存的占用空间。图7为本说明书缓存查询装置另一个实施例的结构示意图,本实施例提供的缓存查询装置中,查询模块62,还用于在根据上述二级查询索引,在二级缓存中进行查询之后,如果二级缓存中不存在上述二级查询索引,或者二级缓存中存在上述二级查询索引,但上述二级查询索引处于失效状态,则根据上述二级查询索引在数据库中进行查找,获得上述二级查询索引对应的数据、上述数据对应的业务属性和查询属性;具体地,在合约系统接收到业务系统发送的更新请求之后,会根据上述更新请求确定待更新的二级查询索引,然后将上述待更新的二级查询索引的状态设置为失效,并删除状态设置为失效的二级查询索引;因此,如果查询模块62根据二级查询索引,在二级缓存中进行查询之后,发现上述二级缓存中不存在上述二级查询索引,或者上述二级缓存中存在上述二级查询索引,但上述二级查询索引处于失效状态,那就说明,上述二级查询索引对应的数据正在被更新,这时,查询模块62需要降级在数据库中进行查询,获取上述二级查询索引对应的数据、上述数据对应的业务属性和查询属性。其中,上述数据对应的业务属性可以包括数据的生成时间和/或状态等信息,上述数据对应的查询属性可以包括上述数据的标识等可以作为查询索引的属性,例如:a_1或a_2。匹配模块64,还用于将上述查询请求携带的查询条件与上述业务属性进行匹配,获得与上述查询条件匹配的业务属性,并获得上述匹配的业务属性对应的数据;举例来说,二级查询索引为“合约号a”,查询模块62根据二级查询索引在数据库中进行查询,可以查询到合约号a对应的所有版本的合约、每份合约的生成时间和每份合约对应的标识(a_1、a_2或a_3)。假设查询请求中携带的查询条件为查询2019年7月1日~7月31日之间生成的合约,那么匹配模块64就可以将每份合约的生成时间与上述查询条件进行匹配,获取在2019年7月1日~7月31日之间的生成时间,进而获取上述生成时间对应的合约。发送模块65,还用于将上述匹配的业务属性对应的数据作为上述查询请求对应的查询结果,发送给业务系统。进一步地,上述缓存查询装置还可以包括:建立模块66和对比模块67;建立模块66,用于当上述二级缓存中不存在上述二级查询索引时,在查询模块62根据上述二级查询索引在数据库中进行查找,获得上述二级查询索引对应的数据、上述数据对应的业务属性和查询属性之后,以上述二级查询索引为键,以上述数据对应的业务属性和查询属性为键值,在上述二级缓存中建立二级查询索引,并将建立的二级查询索引的状态设置为有效;参见图5,在图5所示的索引重建过程中,假设二级查询索引为“xxx_ar”,查询模块62根据上述二级查询索引在数据库中进行查询,可以获取上述二级查询索引对应的数据、上述数据的查询属性和业务属性,其中,上述数据的查询属性包括:“ar_1”、“ar_2”和“ar_3”;上述数据的业务属性可以包括ar_1对应的合约的生成时间和状态、ar_2对应的合约的生成时间和状态,以及ar_3对应的合约的生成时间和状态,上述数据的业务属性在图5中未示出。这样,建立模块66可以“xxx_ar”为键,以“ar_1”、“ar_2”和“ar_3”,以及上述数据对应的业务属性为键值,在二级缓存中建立二级查询索引,并将建立的二级查询索引的状态设置为有效,如图5中所示的“key=xxx_arvalue=ar_1,ar_2,ar_3status=valid”即为重新建立的二级查询索引。对比模块67,用于将上述查询属性与一级缓存中对应的一级查询索引进行对比,获得上述查询属性中存在,而对应的一级查询索引中不存在的新增查询属性;建立模块66,还用于以上述新增查询属性为键,以上述新增查询属性所对应的数据为键值,在上述一级缓存中新增一级查询索引。仍参见图5中的索引重建过程,上述数据的查询属性包括:“ar_1”、“ar_2”和“ar_3”,一级缓存中对应的一级查询索引在二级查询索引重新建立之前仅包括“ar_1”和“ar_2”,因此新增查询属性为“ar_3”,建立模块66以“ar_3”为键,以ar_3对应的合约为键值,在一级缓存中新增一级查询索引,如图5所示的“key=ar_3value=context_xxx3”即为新增的一级查询索引。也就是说,本实施例中,如果一级缓存中的缓存内容发生变更,不会对历史内容做修改,而是新生成一条一级查询索引。进一步地,上述缓存查询装置还可以包括:确定模块68、设置模块69和删除模块610;接收模块61,还用于接收业务系统发送的更新请求;确定模块68,用于根据接收模块61接收的更新请求确定待更新的二级查询索引;设置模块69,用于将上述待更新的二级查询索引的状态设置为失效;删除模块610,用于在将上述更新请求所请求的数据在数据库中更新完毕之后,删除状态设置为失效的二级查询索引。从图5中可以看出,在接收模块61接收业务系统发送的更新请求之前,二级缓存中的二级查询索引的状态为有效,在接收模块61接收到业务系统发送的更新请求之后,设置模块69将二级查询索引的状态设置为失效,在将上述更新请求所请求的数据在数据库中更新完毕之后,向业务系统返回更新成功的响应,删除模块610将状态设置为失效的二级查询索引删除。之后,如果接收模块61接收到相应维度的业务查询请求,查询模块62根据上述业务查询请求中携带的二级查询索引在二级缓存中进行查询,会发现二级缓存中不存在上述二级查询索引,这时会触发建立模块66重建二级查询索引,并新增一级查询索引。也就是说,本实施例中,数据更新操作并不会触发缓存的刷新,而是在数据更新完毕之后,采用业务查询请求触发的方式,对缓存进行刷新,从而保证了缓存的时效性和一致性,又尽可能地降低了同步缓存操作对业务系统的耗时影响。进一步地,设置模块69,还用于在将上述待更新的二级查询索引的状态设置为失效之后,将状态设置为失效的二级查询索引的失效时长设置为预定时长;删除模块610,还用于在删除状态设置为失效的二级查询索引的过程中,当上述状态设置为失效的二级查询索引删除失败时,在经过预定时长之后,自动清除上述状态设置为失效的二级查询索引。其中,上述预定时长可以在具体实现时,根据系统性能和/或实现需求等自行设定,本实施例对上述预定时长的长短不作限定。图8为本说明书电子设备一个实施例的结构示意图,如图8所示,上述电子设备可以包括至少一个处理器;以及与上述处理器通信连接的至少一个存储器,其中:存储器存储有可被处理器执行的程序指令,上述处理器调用上述程序指令能够执行本说明书实施例提供的缓存查询方法。其中,上述电子设备可以为服务器,例如:云服务器,本实施例对上述电子设备的形态不作限定。图8示出了适于用来实现本说明书实施方式的示例性电子设备的框图。图8显示的电子设备仅仅是一个示例,不应对本说明书实施例的功能和使用范围带来任何限制。如图8所示,电子设备以通用计算设备的形式表现。电子设备的组件可以包括但不限于:一个或者多个处理器410,存储器430,连接不同系统组件(包括存储器430和处理单元410)的通信总线440。通信总线440表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(industrystandardarchitecture;以下简称:isa)总线,微通道体系结构(microchannelarchitecture;以下简称:mac)总线,增强型isa总线、视频电子标准协会(videoelectronicsstandardsassociation;以下简称:vesa)局域总线以及外围组件互连(peripheralcomponentinterconnection;以下简称:pci)总线。电子设备典型地包括多种计算机系统可读介质。这些介质可以是任何能够被电子设备访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。存储器430可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(randomaccessmemory;以下简称:ram)和/或高速缓存存储器。电子设备可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。尽管图8中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如:光盘只读存储器(compactdiscreadonlymemory;以下简称:cd-rom)、数字多功能只读光盘(digitalvideodiscreadonlymemory;以下简称:dvd-rom)或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与通信总线440相连。存储器430可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本说明书各实施例的功能。具有一组(至少一个)程序模块的程序/实用工具,可以存储在存储器430中,这样的程序模块包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块通常执行本说明书所描述的实施例中的功能和/或方法。电子设备也可以与一个或多个外部设备(例如键盘、指向设备、显示器等)通信,还可与一个或者多个使得用户能与该电子设备交互的设备通信,和/或与使得该电子设备能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过通信接口420进行。并且,电子设备还可以通过网络适配器(图8中未示出)与一个或者多个网络(例如局域网(localareanetwork;以下简称:lan),广域网(wideareanetwork;以下简称:wan)和/或公共网络,例如因特网)通信,上述网络适配器可以通过通信总线440与电子设备的其它模块通信。应当明白,尽管图8中未示出,可以结合电子设备使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、磁盘阵列(redundantarraysofindependentdrives;以下简称:raid)系统、磁带驱动器以及数据备份存储系统等。处理器410通过运行存储在存储器430中的程序,从而执行各种功能应用以及数据处理,例如实现本说明书实施例提供的缓存查询方法。本说明书实施例还提供一种非暂态计算机可读存储介质,上述非暂态计算机可读存储介质存储计算机指令,上述计算机指令使所述计算机执行本说明书实施例提供的缓存查询方法。上述非暂态计算机可读存储介质可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(readonlymemory;以下简称:rom)、可擦式可编程只读存储器(erasableprogrammablereadonlymemory;以下简称:eprom)或闪存、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、rf等等,或者上述的任意合适的组合。可以以一种或多种程序设计语言或其组合来编写用于执行本说明书操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(localareanetwork;以下简称:lan)或广域网(wideareanetwork;以下简称:wan)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本说明书的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本说明书的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本说明书的实施例所属
技术领域
:的技术人员所理解。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。需要说明的是,本说明书实施例中所涉及的终端可以包括但不限于个人计算机(personalcomputer;以下简称:pc)、个人数字助理(personaldigitalassistant;以下简称:pda)、无线手持设备、平板电脑(tabletcomputer)、手机、mp3播放器、mp4播放器等。在本说明书所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。另外,在本说明书各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机装置(可以是个人计算机,服务器,或者网络装置等)或处理器(processor)执行本说明书各个实施例所述方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory;以下简称:rom)、随机存取存储器(randomaccessmemory;以下简称:ram)、磁碟或者光盘等各种可以存储程序代码的介质。以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1