用于缓存管理的方法和系统与流程

文档序号:18196741发布日期:2019-07-17 05:54阅读:229来源:国知局
用于缓存管理的方法和系统与流程

本公开涉及互联网技术,更具体地,涉及一种用于缓存管理的方法和系统。



背景技术:

目前,互联网在现实生活中应用非常广泛,大数据应用已经成为互联网发展的趋势。在互联网系统中,需要设计便于海量数据存取的逻辑,使得大量用户能够在互联网系统中快速地提取数据。

为了提高互联网系统的并发吞吐量,越来越多的互联网系统需要借助缓存来阻挡海啸式的数据访问。然而,在实现本发明的过程中,发明人发现现有技术中至少存在如下问题。具体地,如果在每个业务逻辑中通过编码实现数据缓存,无疑会产生大量的重复代码,这显然这不是明智的选择。此外,单纯的redis缓存方式可能同样阻挡不了海啸式的数据访问,还需借助本地缓存。



技术实现要素:

有鉴于此,本公开的一个方面提供了一种用于缓存管理的方法,包括:拦截针对缓存操作的请求;分析所拦截的请求的属性,其中所述属性包括对缓存操作的执行逻辑加以指示的缓存策略;以及根据所述属性,执行缓存操作。

根据本公开的实施例,所述缓存操作包括以下项中的一个或更多个:查询缓存数据、删除缓存数据和更新缓存数据。

根据本公开的实施例,所述拦截缓存操作请求还包括:通过spring的aop(面向切面编程)来拦截缓存操作请求。

根据本公开的实施例,所述属性还包括以下项中的一个或更多个:缓存数据标识、缓存容器标识和超时时间。

根据本公开的实施例,根据所述属性执行缓存操作包括:基于所述缓存策略,对通过缓存数据标识指示的缓存数据执行所述缓存操作。

根据本公开的实施例,所述方法还包括:响应于拦截到针对相同缓存操作的多个请求,仅针对所述多个请求中的第一请求执行所述缓存操作;存储所述缓存操作的执行结果;以及向所述多个请求中的除了第一请求之外的其他请求,返回所述执行结果。

根据本公开的实施例,所述存储所述缓存操作的执行结果还包括:当所述执行结果为空数据时,将空数据伪装成有效数据;返回并存储伪装后的有效数据。

根据本公开的实施例,所述方法还包括:在配置文件中配置缓存的监控方式;以及根据所配置的监控方式,监控所述缓存。

本公开的另一个方面提供了一种用于缓存管理的系统,包括:拦截模块,配置为拦截针对缓存操作的请求;分析模块,配置为分析所拦截的请求的属性,其中所述属性包括对缓存操作的执行逻辑加以指示的缓存策略;以及执行模块,配置为根据所述属性,确定并执行缓存操作。

本公开的另一个方面提供了一种用于缓存管理的系统,包括:存储器,配置为存储可执行指令;处理器,与所述存储器相连,并配置为执行存储器中存储的可执行指令,以执行如下操作:拦截针对缓存操作的请求;分析所拦截的请求的属性,其中所述属性包括对缓存操作的执行逻辑加以指示的缓存策略;以及根据所述属性,确定并执行缓存操作。

本公开的另一个方面提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行如上所述的方法。

本公开的另一方面提供了一种计算机程序产品,所述计算机程序产品包括计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。

根据本公开的实施例,由于设置了能够拦截缓存操作请求并对缓存操作请求的属性进行分析的缓存管理系统,可以统一管理数据缓存,使缓存层代码和业务代码解耦合,使开发人员能够根据业务需求来开发业务功能。

此外,根据本公开的实施例,当缓存操作的执行结果为空数据时,由于将所述空数据伪装成有效数据并将其存入缓存,可以有效地防止缓存击穿现象,即,不会针对相同的请求重复执行缓存操作,而是将所存储的伪装后的有效数据直接馈送作为结果。

另外,根据本公开的实施例,通过在配置文件中配置缓存的监控方式,可以实现对缓存层的监控,为缓存层优化提供参考依据。

附图说明

通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:

图1示出了可以应用根据本公开实施例的用于缓存管理的方法的示例性系统架构;

图2示意性示出了根据本公开的实施例的用于缓存管理的方法和系统的应用场景;

图3示意性示出了根据本公开的实施例的用于缓存管理的系统的框图;

图4示意性示出了根据本公开的实施例的用于缓存管理的方法的流程图;

图5详细描述了根据本公开的实施例的用于缓存管理的方法的流程图;以及

图6示出了适于用来实现本公开实施例的终端设备的计算机系统的结构示意图。

具体实施方式

以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。

在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。这里使用的词语“一”、“一个(种)”和“该”等也应包括“多个”、“多种”的意思,除非上下文另外明确指出。此外,在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。

在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。

附图中示出了一些方框图和/或流程图。应理解,方框图和/或流程图中的一些方框或其组合可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,从而这些指令在由该处理器执行时可以创建用于实现这些方框图和/或流程图中所说明的功能/操作的装置。

因此,本公开的技术可以硬件和/或软件(包括固件、微代码等)的形式来实现。另外,本公开的技术可以采取存储有指令的计算机可读介质上的计算机程序产品的形式,该计算机程序产品可供指令执行系统使用或者结合指令执行系统使用。在本公开的上下文中,计算机可读介质可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,计算机可读介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。计算机可读介质的具体示例包括:磁存储装置,如磁带或硬盘(hdd);光存储装置,如光盘(cd-rom);存储器,如随机存取存储器(ram)或闪存;和/或有线/无线通信链路。

本公开的实施例提供了一种用于缓存管理的方法和系统,所述方法和系统能够统一管理数据缓存,使缓存层代码和业务代码解耦合,使开发人员能够根据业务需求来开发业务功能。此外,所述方法和系统还能够有效地防止缓存击穿现象,并实现对缓存层的监控,从而有利于进一步优化缓存层。

图1示出了可以应用根据本公开实施例的用于缓存管理的方法的示例性系统架构100。

如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。

终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。

服务器105可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息--仅为示例)反馈给终端设备。

需要说明的是,本公开实施例所提供的用于管理缓存的方法的一般可以由服务器或终端设备执行,相应地,用于管理缓存的系统一般可以设置于服务器或终端设备中。

应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。

图2示意性示出了根据本公开实施例的用于缓存管理的方法和系统的应用场景。

如图2所示,当一个或更多个终端用户(例如,终端用户210-1、210-2、210-3、210-4和210-5)访问服务器(诸如,服务器220-1和220-2)时,往往首先访问服务器的缓存设备(例如,内存缓存240-1或redis缓存240-2)以查询数据。当没有在缓存设备中查询到数据时,访问数据库250以查询数据。尽管这种方法能够阻挡海啸式的数据访问,然而需要在每个业务逻辑中通过编码实现数据缓存。此外,当存在多个相同的缓存请求且针对该缓存请求的执行结果为空数据时,该方法会导致所述多个相同的缓存请求全部访问数据库,即,产生缓存击穿的现象。

根据本公开的示例实施例,在上述系统架构的缓存层,增添了缓存管理系统230,如图2所示。所述缓存管理系统230可以用于对缓存层的缓存进行管理。具体地,缓存管理系统230可以首先拦截针对缓存操作的请求,以便统一管理所述请求。接着,缓存管理系统230可以分析所拦截的请求的属性,其中所述属性包括对缓存操作的执行逻辑加以指示的缓存策略。最后,根据所述属性,执行缓存操作。例如,所述缓存操作可以包括以下操作中的一个或更多个:查询缓存数据、删除缓存数据和更新缓存数据。在一个实施例中,可以通过添加注解的形式来实现添加缓存管理系统。具体地,可以通过在需要使用缓存的方法上添加一行注解“@cachemethod”并对注解的属性进行设置(诸如,缓存数据标识key、缓存容器标识cachebean、超时时间timeout和缓存策略strategy),来经由spring的aop实现对针对缓存操作的请求的切面拦截。

缓存管理系统不仅可以对内部缓存进行管理,而且可以对各种外部缓存组件进行管理。例如,缓存管理系统可以通过在配置文件中配置需要使用的第三方缓存组件,来管理第三方缓存组件。所述第三方缓存组件包括例如redis缓存组件和memcache缓存组件。在使用注解标记方法的时候,可以设置将该方法返回的数据保存到指定的第三方缓存组件中。通过缓存管理系统230的管理,可以实现对数据缓存的统一管理,解除缓存层代码和业务代码之间的耦合,有效地防止缓存击穿现象,并实现对缓存层的监控,从而有利于进一步优化缓存层。下面将参考图3的实施例来描述缓存管理系统的具体结构。

图3示意性示出了根据本公开的实施例的用于缓存管理的系统的框图。

如图3所示,用于缓存管理的系统300可以包括拦截模块310、分析模块320和执行模块330。

具体地,所述拦截模块310可以配置为拦截针对缓存操作的请求。例如,可以通过spring的aop实现对针对缓存操作的请求的切面拦截。

分析模块320可以配置为分析所拦截的请求的属性,其中所述属性包括对缓存操作的执行逻辑加以指示的缓存策略。具体地,所述属性还可以包括以下项中的一个或更多个:缓存数据标识、缓存容器标识和超时时间。下表1示出了示例性的缓存注解以及属性定义:

表1

应注意以上缓存注解以及属性定义仅是示例性的且本公开不限于上述内容,还可以定义其他属性,或用其他标识来表示上述属性。

执行模块330可以配置为根据所述属性,确定并执行缓存操作。例如,基于所述缓存策略,对通过缓存数据标识指示的缓存数据执行所述缓存操作。在一个实施例中,执行模块330可以通过使用解析的属性和所配置的缓存组件,来根据配置的缓存策略执行缓存操作。例如,如果在缓存中查询到缓存数据,则使用指定的格式化策略对结果进行格式化。在另一实施例中,所述执行模块330还可以配置为响应于拦截到针对相同缓存操作的多个请求,仅针对所述多个请求中的第一请求执行所述缓存操作。随后,执行模块330可以存储所述缓存操作的执行结果;并向所述多个请求中的除了第一请求之外的其他请求,返回所述执行结果。例如,如果在缓存中没有查询到缓存数据,则方法继续执行,并在数据库中查询所述数据。接着,响应于该方法执行完毕,缓存方法的返回值,以便下一次请求直接命中缓存。具体地,返回值包括两种情况。第一种情况是在数据库中查找到所要查询的数据,此时,可以将该数据序列化并返回作为返回值以便在缓存上进行缓存;且第二种情况是在数据库中没有查找到所要查询的数据,此时,可以将空数据伪装成有效数据并对其进行序列化,以便将伪装后的有效数据返回作为返回值,从而在缓存上进行缓存。

备选地,所述用于缓存管理的系统300还可以包括监控模块。所述监控模块可以配置为在配置文件中配置缓存的监控方式;以及根据所配置的监控方式,监控所述缓存。具体地,所述监控模块可以灵活地在配置文件中配置缓存的监控方式,可以将整个缓存的操作过程打印到控制台,或者输出到指定的文件,或者持久化到数据库中,从而方便实施监控缓存工作状态,对于优化和调整缓存策略提供参考依据。

图4示意性示出了根据本公开的实施例的用于缓存管理的方法的流程图。如图4所示,所述方法400包括:在操作s405,拦截针对缓存操作的请求。具体地,可以通过参考图3所述的拦截模块310来执行所述拦截操作。例如,通过spring的aop来拦截缓存操作请求。具体操作方法以结合图3描述,因此将不再进行赘述。

接着,所述方法还包括在操作s410,分析所拦截的请求的属性,其中所述属性包括对缓存操作的执行逻辑加以指示的缓存策略。类似地,所述分析操作可以通过结合图3所述的分析模块320来进行操作,在此将不再进行赘述。

最后,在操作s415,根据所述属性,执行缓存操作。所述执行操作可以通过结合图3所述的操作模块330来进行操作,在此同样不再进行赘述。

图5详细描述了根据本公开的实施例的用于缓存管理的方法的流程图。

如图5所示,首先,响应于在操作p00从外部接收到查询请求,在操作p01,缓存管理系统首先拦截请求。接着,在操作p02,对拦截到的请求进行属性分析。在操作p03,通过分析请求的属性,来确定是否存在缓存数据。响应于存在缓存数据(p03-是),该方法进行到操作p000,直接输出响应结果。然而,响应于不存在缓存数据(p03-否),在操作p04,确定所请求的数据是否是只读数据。如果所请求的数据是只读数据(p04-是),则从数据库读取该数据并执行操作p000。然而,如果所请求的数据不是只读数据(p04-否),则该方法进行到操作p05,以便确定是否同步锁加载。在执行同步锁加载的情况下(p05-是),首先在操作p06开启同步锁,接着在操作p07加载数据。在不执行同步锁加载的情况下(p05-否),直接执行加载数据。随后,在操作p08,确定数据是否为空数据。如果该数据是空数据(p08-是),则在操作p09,确定该系统是否启用防止击穿功能。在启用防止击穿功能的情况下(p09-是),在操作p10,将所述空数据伪装成有效数据,并接着在操作p11将伪装后的“有效数据”序列化,以便在操作p12将该数据缓存到缓存层,从而防止击穿效应。另一方面,如果该数据不是空数据(p08-否),则该方法执行执行操作p11和p12,使得后续的相同缓存操作可以直接命中缓存。在操作p12执行对数据的缓存之后,所述方法返回到操作p000,以输出响应结果。

以上结合图5描述根据本公开的实施例的缓存策略执行流程图。应注意,上述流程仅是示例性的,根据本公开的实施例的用于缓存管理的方法可以在不脱离本公开的范围的前提下还包括其他操作、或省略上述部分操作。此外,上述执行顺序也不应理解为对本公开的限制,而是对本公开的方法的示例性描述。

下面参考图6,其示出了适于用来实现本公开实施例的终端设备的计算机系统600的结构示意图。图6示出的终端设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。

如图6所示,计算机系统600包括中央处理单元(cpu)601,其可以根据存储在只读存储器(rom)602中的程序或者从存储部分608加载到随机访问存储器(ram)603中的程序而执行各种适当的动作和处理。在ram603中,还存储有系统600操作所需的各种程序和数据。cpu601、rom602以及ram603通过总线604彼此相连。输入/输出(i/o)接口605也连接至总线604。

以下部件连接至i/o接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至i/o接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。

特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(cpu)601执行时,执行本申请的系统中限定的上述功能。

需要说明的是,本申请所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。

附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括发送单元、获取单元、确定单元和第一处理单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,发送单元还可以被描述为“向所连接的服务端发送对象获取请求的单元”。

以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1