掌桥专利:专业的专利平台
掌桥专利
首页

一种通用缓存方法及装置

文献发布时间:2024-04-18 20:01:30


一种通用缓存方法及装置

技术领域

本发明涉及缓存领域,尤其涉及一种通用缓存方法及装置。

背景技术

在各应用系统中,经常使用缓存Cache技术加快读取速度以提升系统的处理能力,缓存通常以内存等作为存放载体,例如将全局参数等数据从数据库加载并缓存至内存中,或者提前将数据库表中指定的业务数据提前加载至内存中。

使用缓存后,每笔业务处理过程中所需的参数、校验数据或者其他业务数据可直接从缓存中读取并使用,无需从数据库或配置文件进行再次加载,可有效减低磁盘IO等开销,实现系统处理效率整体提升。

然而,现有缓存技术中的存在与业务逻辑耦合在一起问题。多数缓存方案在具体实现中,与应用逻辑层或者数据访问层交互在一起,缓存源代码与业务逻辑源代码耦合在一起。而不同的应用系统其开发语言不通、业务逻辑不同、通信报文格式不同、数据内容和形态也不同,使得每个系统都有其自身具体的缓存机制,难以进行统一,导致重复开发和测试。而且一旦缓存实现源代码发生变动则需要对涉及的业务逻辑源代码的同步调整,或者一旦业务逻辑变动也会涉及缓存机制源代码同步适配修改。

若在网络层、操作系统层等底层统一构建的缓存,虽能避免以上问题,但存在缓存命中率低的问题。在网络层或操作系统底层构建缓存,会将报文内容整体视为一段字节序列串,仅在报文内容完全相同的情况下才会命中;若报文内容中存在任意字节不同(例如流水号不同)则无法命中。并且这种在底层的缓存机制难以从业务层区是否查询接口还是非查询查询接口,也无法区分应答报文成功与否,无法实现精细化缓存管理要求。

因此,需一种通用性高,且能精细化缓存管理的通用缓存方法。

发明内容

本发明各实施例提供一种通用缓存方法,以解决相关技术中通用性差,无法实现精细化缓存管理且命中率低的问题。所述技术方案如下:

根据本发明的一个方面,一种通用缓存方法,所述方法包括:构建缓存区,对所述缓存区中缓存的属性进行配置;所述缓存区包括应用服务内存和外部组件;

获取本次调用接口,若所述本次调用接口符合所述属性配置,则读取请求报文,根据所述请求报文得到缓存key;根据所述缓存key从所述缓存区中查询第一应答报文,若命中则根据所述请求报文对所述第一应答报文进行替换获取对应本次调用接口的应答报文实现获取报文缓存;若未命中则从被调方中读取第二应答报文,若调用成功则将所述第二应答报文作为对应本次调用的目标应答报文,并将所述目标应答报文放置在所述缓存区中实现放置报文缓存。

在其中一个实施例中,对所述缓存区中缓存的属性进行配置通过以下步骤实现:配置所述缓存的生命周期时长cacheTTL;所述生命周期时长用于指示所述缓存中存储数据的有效时长;配置所述缓存的接口列表cacheMsgList;所述接口列表用于限定可被缓存的接口;配置所述缓存的需删除报文字段名列表excludeFieldList;所述报文字段名列表中的字段在缓存时需删除。

在其中一个实施例中,缓存的报文字段名列表包括请求报文和应答报文中均存在的公共字段。

在其中一个实施例中,读取请求报文,根据所述请求报文得到缓存key通过以下步骤实现:根据所述缓存的报文字段名列表,从所述请求报文中删除需要删除的报文字段及其值,得到缓存key。

在其中一个实施例中,命中则根据所述请求报文对所述第一应答报文进行替换获取对应本次调用接口的应答报文实现获取报文缓存通过以下步骤实现:若所述缓存区中存在所述第一应答报文且所述第一应答报文的生命周期时长未过期,则表示命中,反之则表示未命中;根据需删除报文字段名列表,将第一应答报文中对应字段的值以本次请求报文中的值进行替换,将替换后的报文作为对应本次调用接口的应答报文实现获取报文缓存。

在其中一个实施例中,若调用成功则将所述第二应答报文作为对应本次调用的目标应答报文,并将所述目标应答报文放置在所述缓存区中实现放置报文缓存通过以下步骤实现:从被调方中读取第二应答报文,将所述第二应答报文内容作为缓存value;为所述缓存key和缓存value配置生命周期时长作为对应本次调用的目标应答报文,并将所述目标应答报文放置在所述缓存区中实现放置报文缓存。

在其中一个实施例中,构建缓存区通过以下步骤实现:在应用服务内存中分配一块内存作为缓存区,通过不同的开发语言实现以key和value的形式保存缓存数据。

在其中一个实施例中,构建缓存区还包括以下步骤:独立于应用服务的外部组件作为独立缓存区。

在其中一个实施例中,所述方法还包括以下步骤:通过AOP切面技术,定义切点Pointcut,指向即将发出请求报文的函数名,以Around环绕模式对所述切点Pointcut开发接口执行获取报文缓存和放置报文缓存;或者,通过修改获取报文缓存和放置报文缓存对应的代码实现获取报文缓存和放置报文缓存。

根据本发明的一个方面,一种通用缓存装置,所述装置包括:预处理模块,用于构建缓存区,对所述缓存区中缓存的属性进行配置;缓存key获取模块,用于获取本次调用接口,在所述本次调用接口符合所述属性配置时读取请求报文,根据所述请求报文得到缓存key;获取报文缓存模块,用于根据所述缓存key从所述缓存区中查询第一应答报文,若命中则根据所述请求报文对所述第一应答报文进行替换获取对应本次调用接口的应答报文实现获取报文缓存;放置报文缓存模块,用于在未命中时从被调方中读取第二应答报文,若调用成功则将所述第二应答报文作为对应本次调用的目标应答报文,并将所述目标应答报文放置在所述缓存区中实现放置报文缓存。

本发明提供的技术方案带来的有益效果是:

在上述技术方案,本发明通过首先构建缓存区,对缓存区中缓存的属性进行配置,获取本次调用接口,若本次调用接口符合所述属性配置,则读取请求报文,根据请求报文得到缓存key,根据缓存key从缓存区中查询第一应答报文,若命中则根据请求报文对第一应答报文进行替换获取对应本次调用接口的应答报文实现获取报文缓存,若未命中则从被调方中读取第二应答报文,若调用成功则将第二应答报文作为对应本次调用的目标应答报文,并将目标应答报文放置在缓存区中实现放置报文缓存,实现了对通信协议、报文格式、调用方式、字段内容等均不存在任何限制,具有广泛的通用性;可以按需配置需缓存的接口列表,也仅对调用结果为成功的应答报文才进行放置报文缓存,避免进行失败或超时等情况下的无效缓存;与应用系统耦合度低,甚至无需修改既有系统已有源代码即可使用本缓存机制,适应性广;以配置方式实现了缓存精细粒度管理;通过需删除的报文字段机制,可显著提供缓存命中率;本缓存方案由调出方完成,缓存命中时机也在调出方,相对于在被调方进行缓存的方案,避免了调用过程通信耗时等开销,进一步提高了缓存收益,从而能够有效地解决相关技术中存在的通用性差,无法实现精细化缓存管理且效率低下的问题。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对本发明实施例描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是一种通用缓存方法的流程图;

图2是图1中步骤170的流程图;

图3是根据一示例性实施例示出的一种通用缓存方法的流程图;

图4是根据一示例性实施例示出的一种通用缓存方法的流程示意图;

图5是根据一示例性实施例示出的应用服务内存的缓存结构图;

图6是根据一示例性实施例示出的外部组件的缓存结构图;

图7是一应用场景中接口调用报文的内容示意图;

图8是图7对应应用场景中获取报文缓存的内容示意图;

图9是图7对应应用场景中放置报文缓存的内容示意图;

图10是根据一示例性实施例示出的一种通用缓存装置的框图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本公开的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。

本文所述缓存在英文中对应为Cache,不是Buffer(Buffer有时在中文被称为缓存,但称为缓冲更准确)。

现有技术与业务逻辑过于耦合,一旦更换缓存机制则涉及业务逻辑源代码的调整,或者一旦业务逻辑变动也会涉及缓存机制源代码同步修改适配,通用性差,在底层的缓存机制难以从业务层区是否查询接口还是非查询查询接口,也无法区分应答报文成功与否,导致无法实现精细化缓存管理且命中率低。

为此,本发明提供一种通用缓存方法,对通信协议、报文格式、调用方式、字段内容等均不存在任何限制,具有广泛的通用性,可以按需配置需缓存的接口列表,且实现了缓存精细粒度管理,提高了缓存管理效率,该通用缓存方法适用于通用缓存装置中,该通用缓存装置可以是电子设备。本发明实施例中的通用缓存方法可以应用于多种场景中,例如缓存管理等。

请参阅图1,本发明实施例提供了一种通用缓存方法,该方法适用于电子设备。

在下述方法实施例中,为了便于描述,以该方法各步骤的执行主体为电子设备为例进行说明,但是并非对此构成具体限定。

如图1所示,该方法可以包括以下步骤:

步骤110,构建缓存区,对缓存区中缓存的属性进行配置。

在一个可能的实现方式,缓存区包括应用服务内存和外部组件。

在一个可能的实现方式,在应用服务内存中分配一块内存作为缓存区,通过不同的开发语言实现以key和value的形式保存缓存数据,或者,独立于应用服务的外部组件作为独立缓存区。

具体地,在调出方应用服务的内部开辟一块内存作为缓存区,缓存以Key-Value形式保存,其中,不同开发语言可以有不同的具体实现,例如Java或Python等语言中可以使用Map类型作为保存缓存的对象。

其中,考虑到缓存区在应用服务内存中,存在跨应用服务共享无法共享缓存的不足,可以采用Redis、Memcached等作为独立缓存模块,应用于多节点部署或者分布式应用系统的场景中。

具体地,对缓存区中缓存的属性进行配置可以包括以下步骤:

步骤111,配置缓存的生命周期时长。

其中,生命周期时长用于指示缓存中存储数据的有效时长,即某个具体缓存数据的有效时长,超过该时长的缓存失效。

步骤113,配置缓存的接口列表。

其中,接口列表用于限定可被缓存的接口,需缓存的接口列表,存储可被缓存的被调方接口/URL/交易码/功能码列表,仅对列表范围内的接口才进行缓存,其他不进行缓存,通常,查询类接口适合纳入到本接口列表中。

步骤115,配置缓存的需删除报文字段名列表。

其中,报文字段名列表中的字段在缓存时需删除,报文字段名列表即为缓存时需删除的报文字段名列表excludeFieldList,例如,对于流水号等字段在缓存时需要删除,以提高缓存命中率,这些需删除的字段通常为公共字段,即请求报文和应答报文中都存在的公共字段。

具体地,因为即使相同的查询接口(相同的查询条件,在数据不变时其查询结果也相同)其报文流水号等字段的值是不同的,如果带上这些字段会导致相同查询的缓存无法命中,因此在放置报文缓存时需将请求报文里其中对最终查询结果无影响的、且字段值有变化的字段删除。

在一个可能的实现方式,上述缓存的属性配置需提前配置,在应用服务启动时加载,并允许人为动态修改,修改后实时生效。

步骤130,获取本次调用接口,若本次调用接口符合属性配置,则读取请求报文,根据请求报文得到缓存key。

在一个可能的实现方式,根据缓存的报文字段名列表,从请求报文中删除需要删除的报文字段及其值,得到缓存key。

通过上述过程,本发明通过按需配置需缓存的接口列表,也仅成功应答报文才进行放置报文缓存,避免进行失败或超时等情况下的无效缓存,实现了缓存精细粒度管理,从而能够有效地解决相关技术中存在的无法实现精细化缓存管理且命中率低的问题。

步骤150,根据缓存key从缓存区中查询第一应答报文,若命中则根据请求报文对第一应答报文进行替换获取对应本次调用接口的应答报文实现获取报文缓存。

在一个可能的实现方式,获取报文缓存可以包括以下步骤:

步骤151,若缓存区中存在第一应答报文且第一应答报文的生命周期时长未过期,则表示命中,反之则表示未命中;

步骤153,根据需删除报文字段名列表,将第一应答报文中对应字段的值以本次请求报文中的值进行替换,将替换后的报文作为对应本次调用接口的应答报文实现获取报文缓存。

通过上述过程,本发明实施例根据属性配置、获取报文缓存和放置报文缓存,发送对应的缓存应答报文,对通信协议、报文格式、调用方式、字段内容等均不存在任何限制,具有广泛的通用性,提高了缓存管理效率。

步骤170,若未命中则从被调方中读取第二应答报文,若调用成功则将第二应答报文作为对应本次调用的目标应答报文,并将目标应答报文放置在缓存区中实现放置报文缓存。

具体地,如图2所示,步骤170可以包括以下步骤:

步骤210,从被调方中读取第二应答报文,将第二应答报文内容作为缓存value。

步骤230,为缓存key和缓存value配置生命周期时长作为对应本次调用的目标应答报文,并将目标应答报文放置在缓存区中实现放置报文缓存。

在一个可能的实现方式,通过AOP切面技术,定义切点Pointcut,指向即将发出请求报文的函数名,以Around环绕模式对切点Pointcut开发接口执行获取报文缓存和放置报文缓存,或者,通过修改获取报文缓存和放置报文缓存对应的代码实现获取报文缓存和放置报文缓存。

通过上述过程,本发明实施例通过首先构建缓存区,对缓存区中缓存的属性进行配置,获取本次调用接口,若本次调用接口符合所述属性配置,则读取请求报文,根据请求报文得到缓存key,根据缓存key从缓存区中查询第一应答报文,若命中则根据请求报文对第一应答报文进行替换获取对应本次调用接口的应答报文实现获取报文缓存,若未命中则从被调方中读取第二应答报文,若调用成功则将第二应答报文作为对应本次调用的目标应答报文,并将目标应答报文放置在缓存区中实现放置报文缓存,实现了对通信协议、报文格式、调用方式、字段内容等均不存在任何限制,具有广泛的通用性;可以按需配置需缓存的接口列表,也仅对调用结果为成功的应答报文才进行缓存放置,避免进行失败或超时等情况下的无效缓存;与应用系统耦合度低,甚至无需修改既有系统已有源代码即可使用本缓存机制,适应性广;以配置方式实现了缓存精细粒度管理;通过需删除的报文字段机制,可显著提供缓存命中率;本缓存方案由调出方完成,缓存命中时机也在调出方,相对于在被调方进行缓存的方案,避免了调用过程通信耗时等开销,进一步提高了缓存收益,从而能够有效地解决相关技术中存在的通用性差,无法实现精细化缓存管理且效率低下的问题。

在一示例性实施例中,图3是一种通用缓存方法的流程图。

如图3所示,可以包括以下步骤:

步骤310,构建对应的缓存区。

步骤320,配置缓存属性。

步骤330,获取报文缓存:根据缓存属性从缓存区获取已缓存的应答报文。

步骤340,若缓存命中,则对从缓存获取的应答报文,根据配置的需删除的报文字段名列表,替换其字段值。

步骤350,将字段值替换后的应答报文作为本次请求的应答报文。

步骤360,若缓存未命中,则调出方向被调方发出调用并读取被调方返回的第二应答报文,并接收调用返回的应答报文。

步骤370,放置报文缓存:若调用返回成功应答报文,则将应答报文存入缓存区中。

步骤380,将应答报文返回到应用系统。

通过上述过程,本发明实施例首先构建缓存对应的缓存区,该缓存区包括应用服务内存和外部组件,然后对所述缓存进行属性配置,读取请求报文,根据属性配置获取报文缓存,若命中则无需向被调方发出调用;若未命中则向被调方发出调用,若调用结果为成功则根据缓存动作放置报文缓存,实现了缓存精细粒度管理,从而能够有效地解决相关技术中存在的通用性差,无法实现精细化缓存管理且命中率低的问题。

在一示例性实施例中,图4是一种通用缓存方法的流程示意图。

如图4所示,在调出方发出请求报文之前判断本次调用接口是否在配置需缓存的接口列表范围内,若不在范围内则通过调出方对外发出调用,若在范围内则从请求报文内容中删除需删除的报文字段及其值,删除后得到结构作为缓存key,以该缓存key从缓存区中读取缓存,判断缓存是否命中,若缓存未命中则通过调出方对外发出调用。

具体地,主调方应用服务根据配置的excludeFieldList字段列表,从请求报文内容中删除需删除的报文字段及其值,删除后得到结果(通常为一个字符串)作为缓存key,若缓存未命中,则表示不存在该换错或者存在该缓存但是其生命周期时长cacheTTL已经过期。

进一步地,若缓存命中,则表示存在该缓存且生命周期时长cacheTTL未过期,取出该缓存的value值,即之前的已缓存的应答报文,将缓存的应答报文中中对应字段的值以本次请求报文中的值进行替换,将字段值替换后的缓存请求应答报文作为本次缓存请求的应答报文直接返回,结束获取报文缓存的流程,调出方进行后续处理。

具体地,将缓存应答报文中部分字段值替换为本次请求报文的值,即根据配置的excludeFieldList字段列表,对已取得的应答报文内容找到对应字段,并将其值替换为本次请求报文对应的值。

进一步地,获取报文缓存结束后,向被调方应用服务(应用服务x、应用服务y、应用服务z)发出调用指令,若调用返回的结果为成功,则将请求报文中删除需要删除的报文字段及其值,将删除后的结果作为缓存key,将调用返回的成功应答报文内容作为缓存value,将步骤S9和步骤S10中得到的缓存key和缓存value放入缓存区中,并配置生命周期时长cacheTTL,按原方式返回调用结果,若调用返回结果为非成功,即调用失败或超时等情况,则,结束放置报文缓存的流程,调出方进行后续处理。

通过上述过程,本发明实施例首先构建缓存区,该缓存区包括应用服务内存和外部组件,然后对所述缓存进行属性配置,读取请求报文,根据属性配置获取报文缓存,若命中则无需向被调方发出调用;若未命中则向被调方发出调用,若调用返回结果为成功则根据缓存动作放置报文缓存,对通信协议、报文格式、调用方式、字段内容等均不存在任何限制,具有广泛的通用性,可以按需配置需缓存的接口列表,也仅成功应答报文才进行放置报文缓存,避免进行失败或超时等情况下的无效缓存,实现了缓存精细粒度管理,从而能够有效地解决相关技术中存在的通用性差,无法实现精细化缓存管理且命中率低的问题。

在一示例性实施例中,图5展示了应用服务内存的缓存结构图。

如图5所示,使用应用服务内存作为缓存区,应用服务之间通过报文进行交互,包括以下模块:

缓存区模块:在调出方内部开辟一块内存作为缓存区,缓存以Key-Value形式保存,不同开发语言可以有不同的具体实现,例如Java或Python等语言中可以使用Map类型作为保存缓存的对象。

接口调出模块:调出方对外发出调用请求的模块,用于按通信协议发出请求报文并接收被调方应答报文,不用应用服务采用不同开发技术,例如Http协议中的HttpClient、Spring Boot中的Feign、Socket通信中的SocketClient等等。

自动缓存模块:用于放置报文缓存和获取报文缓存,自动缓存模块包围接口调出模块,即在接口调出发出请求报文前,先执行自动缓存模块中的获取报文缓存功能,在接口调出模块接收应答报文后,执行自动缓存模块的放置报文缓存后再返回。

其中,自动缓存模块的实现方式通常有:不改变接口调出模块,通过AOP切面技术增加放置报文缓存和获取报文缓存两个动作;在接口调出模块中修改代码,增加放置报文缓存和获取报文缓存功能。

在另一示例性实施例中,图6展示了是外部组件的缓存结构图。

如图6所示,使用外部组件作为缓存区,由于缓存区在应用服务内存中存在跨应用服务共享无法共享缓存的不足,为此提出可用于采用多节点部署的应用服务或者分布式应用系统的场景中,应用服务之间通过报文进行交互,包括以下模块:

独立缓存模块:采用Redis、Memcached等作为独立缓存模块的具体实现。

接口调出模块:调出方对外发出调用请求的模块,用于按通信协议发出请求报文并接收被调方应答报文,不同应用服务采用不同开发技术,例如Http协议中的HttpClient、Spring Boot中的Feign、Socket通信中的SocketClient等等。

自动缓存模块:用于放置报文缓存和获取报文缓存,自动缓存模块包围接口调出模块,即在接口调出发出请求报文前,先执行自动缓存模块中的获取报文缓存功能,在接口调出模块接收应答报文后,执行自动缓存模块的放置报文缓存后再返回。

在一个可能的实现方式,在自动缓存模块中,构建放置报文缓存功能和获取报文缓存功能可以通过以下步骤:在自动缓存模块中,通过AOP切面技术,定义切点Pointcut,该切点指向接口调出模块中即将发出请求报文的函数名(通常该函数入参为请求报文,返回为应答报文);在自动缓存模块中,通过AOP切面技术,以Around环绕模式对以上定义切点Pointcut开发接口报文缓存流程,包括调用放置报文缓存功能、获取报文缓存功能等,此方式不需要改动接口调出模块代码,对既有的接口调出模块无侵入性。

在一个可能的实现方式,在自动缓存模块中,构建放置报文缓存功能和获取报文缓存功能还可以通过以下步骤:修改接口调出模块,增加接口报文缓存流程,包括放置报文缓存功能、获取报文缓存功能等,此方式适合拥有接口调出模块源代码,且允许改动的应用场景。

通过上述缓存结构,本发明实施例实现了对通信协议、报文格式、调用方式、字段内容等均不存在任何限制,具有广泛的通用性,可以按需配置需缓存的接口列表,也仅成功应答报文才进行放置报文缓存,避免进行失败或超时等情况下的无效缓存,实现了缓存精细粒度管理,从而能够有效地解决相关技术中存在的通用性差,无法实现精细化缓存管理且命中率低的问题。

在一应用场景中,图7展示了接口调用请求报文和应答报文内容示意图,图8展示了获取报文缓存报文内容示意图,图9展示了放置报文缓存报文内容示意图;

如图7所示,以HTTP为通信协议,JSON报文为通信报文,以查询客户信息QueryCustomerInfo场景为例,图7中的图(a)展示了查询客户信息QueryCustomerInfo请求报文内容;图7中的图(b)展示了查询客户信息QueryCustomerInfo失败的应答报文内容,图7中的图(c)展示了查询客户信息QueryCustomerInfo成功的应答报文内容。

根据图7中的接口调用报文内容,对缓存属性进行配置:缓存生命周期时长cacheTTL配置为180秒,即缓存生命周期时长为3分钟,超过该时长的缓存失效;需缓存的接口列表cacheMsgList配置为: QueryCustomerInfo;缓存时需删除的报文字段名列表excludeFieldList配置为: Seq和ReqTimeStamp。

如图8所示,主调方应用服务根据配置的excludeFieldList字段列表,从请求报文内容中删除需删除的报文字段及其值,在本应用场景中,删除字段Seq和ReqTimeStamp,删除后得到结果作为缓存key,图8中的图(a)展示了删除需删除的报文字段后的报文内容,然后根据该缓存key从缓存区中读取缓存,结果分为缓存命中或缓存未命中两种情况。

其中,若不存在该缓存或存在但其生命周期时长cacheTTL已过期,则表示缓存未命中;若存在该缓存且其生命周期时长cacheTTL未过期(仍在180秒有效期内)则缓存命中,如图8中的图(c)所示,若缓存命中则取出该缓存value值,然后如图8中的图(b)所示,将缓存应答报文中部分字段值替换为本次请求的值,即根据配置的excludeFieldList字段列表,在本应用场景中,为字段Seq和ReqTimeStamp,对已取得的应答报文内容找到对应字段,并将其值替换为本次请求报文对应的值,将字段值替换后的应答报文作为本次请求的应答报文直接返回,无需再向被调方发出调用,流程结束。

若缓存未命中则向被调方发出调用请求,并接收返回的应答报文,调用结果分为调用非成功或成功两种情况,若调用结果为非成功(应答报文返回失败或超时等情况),则直接按原流程返回,流程结束。

如图9所示,若调用结果为成功则放置报文缓存,如图9中的图(a)所示,对请求报文内容中删除需删除的报文字段及其值,删除后得到结果作为缓存key,然后如图9中的图(b)所示,以调用返回的应答报文作为缓存value,将以上得到key-value放入缓存区中(带上cacheTTL属性180秒),按原流程返回,流程结束。

通过上述过程,本发明实施例通过首先构建缓存对应的缓存区,该缓存区包括应用服务内存和外部组件,然后对所述缓存进行属性配置,读取请求报文,根据属性配置获取报文缓存,若命中则无需向被调方发出调用;若未命中则向被调方发出调用,若调用结果为成功则根据缓存动作放置报文缓存,对通信协议、报文格式、调用方式、字段内容等均不存在任何限制,具有广泛的通用性,可以按需配置需缓存的接口列表,也仅成功应答报文才进行放置报文缓存,避免进行失败或超时等情况下的无效缓存,实现了缓存精细粒度管理,从而能够有效地解决相关技术中存在的通用性差,无法实现精细化缓存管理且命中率低的问题。

下述为本发明装置实施例,可以用于执行本发明所涉及的通用缓存方法。对于本发明装置实施例中未披露的细节,请参照本发明所涉及的通用缓存方法的方法实施例。

请参阅图10,本发明实施例中提供了一种通用缓存装置800。

所述装置800包括但不限于:预处理模块810、缓存key获取模块830、获取报文缓存模块850及放置报文缓存模块870。

其中,预处理模块810,用于构建缓存区,对缓存区中缓存的属性进行配置。

缓存key获取模块830,用于获取本次调用接口,在本次调用接口符合属性配置时读取请求报文,根据请求报文得到缓存key。

获取报文缓存模块850,用于根据缓存key从缓存区中查询第一应答报文,若命中则根据请求报文对第一应答报文进行替换获取对应本次调用接口的应答报文实现获取报文缓存。

放置报文缓存模块870,用于在未命中时从被调方中读取第二应答报文,若调用成功则将第二应答报文作为对应本次调用的目标应答报文,并将目标应答报文放置在缓存区中实现放置报文缓存。

需要说明的是,上述实施例所提供的通用缓存时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即通用缓存装置的内部结构将划分为不同的功能模块,以完成以上描述的全部或者部分功能。

另外,上述实施例所提供的通用缓存装置与通用缓存方法的实施例属于同一构思,其中各个模块执行操作的具体方式已经在方法实施例中进行了详细描述,此处不再赘述。

与相关技术相比,本发明的有益效果是:

1.本发明实施例通过首先构建缓存区,对缓存区中缓存的属性进行配置,获取本次调用接口,若本次调用接口符合所述属性配置,则读取请求报文,根据请求报文得到缓存key,根据缓存key从缓存区中查询第一应答报文,若命中则根据请求报文对第一应答报文进行替换获取对应本次调用接口的应答报文实现获取报文缓存,若未命中则从被调方中读取第二应答报文,若调用成功则将第二应答报文作为对应本次调用的目标应答报文,并将目标应答报文放置在缓存区中实现放置报文缓存,实现了对通信协议、报文格式、调用方式、字段内容等均不存在任何限制,具有广泛的通用性;可以按需配置需缓存的接口列表,也仅对调用结果为成功的应答报文才进行缓存放置,避免进行失败或超时等情况下的无效缓存;与应用系统耦合度低,甚至无需修改既有系统已有源代码即可使用本缓存机制,适应性广;以配置方式实现了缓存精细粒度管理;通过需删除的报文字段机制,可显著提供缓存命中率;本缓存方案由调出方完成,缓存命中时机也在调出方,相对于在被调方进行缓存的方案,避免了调用过程通信耗时等开销,进一步提高了缓存收益,从而能够有效地解决相关技术中存在的通用性差,无法实现精细化缓存管理且效率低下的问题。

2.本发明对通信协议、报文格式、调用方式、字段内容等均不存在任何限制。方案具有广泛的通用性。

3.本发明可以按需配置需缓存的接口列表,仅成功应答报文才缓存,避免对失败或超时这些情况下的无效缓存,可实现缓存精细粒度管理。

4.本发明与应用系统耦合度低,无需修改既有系统的源代码即可使用本缓存机制,无论老应用系统还是新应用系统均可采用,适应性广。

5.本发明流程清晰,开发测试周期通常仅需几天即可完成,具备简单快捷易用,投入低的特点。

6.本发明通过删除需删除的报文字段机制,大幅提升了缓存命中率。

7.本发明既可采用应用内存作为缓存区,也可采用外部组件,可灵活适配不同的应用系统架构。

应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

相关技术
  • 一种基于非刚性配准变形的薄壁零件模型重构方法
  • 一种基于SIFT特征与光流模型的非刚性图像配准方法
技术分类

06120116556064