一种缓存管理方法及装置与流程

文档序号:12596389阅读:145来源:国知局
一种缓存管理方法及装置与流程

本发明涉及数据处理领域,尤其涉及一种缓存管理方法及装置。



背景技术:

缓存技术是指利用缓冲器保存网页中数据,其基本思想是利用客户访问的时间局部性原理,将客户访问过的内容在缓冲器中存放一个副本,当该内容下次被访问时,不立即访问数据库服务器,而是先从缓冲器查询。缓存技术可以在很大程度上避免重复运算和重复IO(输入输出)访问数据库,因此可以极大的提升数据处理速度。目前各种系统会大量的使用缓存,用以提高数据访问速度。

目前使用缓存技术的系统会设置缓存的有效时间,例如半小时。在缓存未失效之前,该系统可以命中缓存快速返回命中结果。当缓存失效时,该系统命中缓存失败,会重新进行运算和IO访问。虽然在缓存失效后,可以重建缓存,但是如果在缓存重建完成以前有大量的访问请求,就会出现大量的重复运算和IO访问,很可能会触发缓存雪崩,导致使用缓存技术的系统的处理速度显著下降。

综上,目前的缓存技术在实际使用时存在缓存雪崩的隐患。



技术实现要素:

本发明实施例提供一种缓存管理方法及装置,用以降低现有的缓存管理方法发生缓存雪崩的概率。

本发明方法包括一种缓存管理方法,该方法包括:

确定缓存中的目标缓存对象,所述目标缓存对象是数据属性为系统内部固定参数的缓存对象,和/或数据属性为系统外部请求参数且在当前生命周期内的被访问次数大于设定阈值的缓存对象;

根据所述目标缓存对象的缓存失效时间,从数据库服务器中获取与目标缓存对象的关键值相同的实时数据对象;

将所述实时数据对象写入所述缓存,同时生成所述实时数据对象的缓存失效时间。

基于同样的发明构思,本发明实施例进一步地提供一种缓存管理装置,该装置包括:

确定单元,用于确定缓存中的目标缓存对象,所述目标缓存对象是数据属性为系统内部固定参数的缓存对象,和/或数据属性为系统外部请求参数且在当前生命周期内的被访问次数大于设定阈值的缓存对象;

获取单元,用于根据所述目标缓存对象的缓存失效时间,从数据库服务器中获取与目标缓存对象的关键值相同的实时数据对象;

写入单元,用于将所述实时数据对象写入所述缓存;

生成单元,用于生成所述实时数据对象的缓存失效时间。

本发明实施例,预先获取缓存中的每个缓存对象的数据属性和缓存失效时间,根据每个缓存的数据属性确定出系统内部固定参数,将数据属性为系统内部固定参数的缓存对象确定为目标缓存对象;同时将数据属性为系统外部请求参数的缓存对象且在当前生命周期内的被访问次数大于设定阈值的缓存对象确定为目标缓存对象,这样,根据目标缓存对象的缓存失效时间,对目标缓存进行更新操作,更新的方法是从数据库服务器中获取与目标缓存对象的关键值相同的实时数据对象,将所述实时数据对象写入所述缓存,同时生成所述实时数据对象的缓存失效时间,这样相当于对目标缓存进行预刷新,使得目标缓存在被用户请求时始终是有效的,因此本发明实施例可以做到尽可能避免发生缓存穿透,从而降低发生缓存雪崩的概率,提高了数据处理系统的稳定性。

附图说明

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

图1为现有技术中的一种数据访问流程示意图;

图2为现有技术中的一种瞬时请求缓存数据切面示意图;

图3为本发明实施例提供的一种缓存管理方法流程示意图;

图4为本发明实施例提供的缓存管理方法应用于银联钱包的示意图;

图5为本发明实施例提供的的一种数据访问流程示意图;

图6为本发明实施例提供的一种缓存管理装置架构示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

目前,应用系统通常分为客户端和服务器端,例如用户通过web客户端将大量Http请求发送到web服务端形成高并发访问流量,应用系统数据访问架构图如图1所示,在图1中,web客户端101包括各种浏览器,web服务端102与Cache(缓存)服务端103、和数据库以及其它节点104相连接,其中,该应用系统的数据访问步骤如下:

步骤1,web客户端101通过Http协议发送各种数据请求到web服务器端102。

步骤2,web服务器端102根据各种数据请求的报文按照一定规则拼接缓存key值,调用Cache服务端103。

步骤3,Cache服务端103收到由web服务器端102通过调用Cache客户端发送的请求,根据缓存key值进行查询,然后返回值Server服务端102相关的缓存数据。

步骤4,当Cache服务端103返回数据为空或异常数据时,Server服务端102调用DB(数据库)或Other Node(其他服务终端),查询相关数据。

步骤5,DB或Other Node收到请求对相关请求进行数据处理后,返回相应数据报文。

步骤6,当Cache服务端103返回数据为空或异常数据并且DB或Other Node能正常访问到数据,则通过Server服务端102的Cache客户端发送写数据缓存请求。

步骤7,Cache服务端103收到Cache客户端发送的完成写操作并返回相关成功或失败应答给web服务器端102。

步骤8,web服务器端102按照web客户端101请求通过业务系统处理后数据返回应答报文。

当Cache服务端103中数据缓存失效,且在高并发情况下发生缓存穿透,因此大量请求会被转移到DB或Other Node,从而缓存失去应有的作用。

如图2所示,该图给出了瞬时请求缓存数据切面图,当web服务器端以一秒为时间轴请求Cache服务器端,在此一秒的时间轴中,存在两种请求情况:

(1)通过web服务器端的Cache客户端请求Cache Server,此时所请求缓存数据未失效正常返回数据。web服务器端根据业务逻辑处理相关数据与缓存数据,组装报文后正常返回。

(2)通过web服务器端的Cache客户端请求Cache Server,此时所请求缓存数据已失效返回数据为空,web服务器端请求数据库或其他服务终端,获取相关数据与server端业务逻辑一并处理后,组装报文正常返回。

故,当第一种请求情况发生缓存穿透时,势必会造成web服务器端请求数据库或其他服务终端,就会出现大量的重复运算和IO访问,很可能会触发缓存雪崩,导致使用缓存技术的系统的处理速度显著下降。基于以上分析,本发明实施例提供了一种缓存管理方法流程示意图,如图3所示,具体地实现方法包括:

步骤201,确定缓存中的目标缓存对象,所述目标缓存对象是数据属性为系统内部固定参数的缓存对象,和/或数据属性为系统外部请求参数且在当前生命周期内的被访问次数大于设定阈值的缓存对象。

步骤202,根据所述目标缓存对象的缓存失效时间,从数据库服务器中获取与目标缓存对象的关键值相同的实时数据对象。

步骤203,将所述实时数据对象写入所述缓存,同时生成所述实时数据对象的缓存失效时间。

在执行步骤201之前,预先获取缓存中的每个缓存对象的数据属性以及缓存创建时间和缓存失效时间,通过每个缓存对象的缓存创建时间和缓存失效时间可以得到该缓存对象的生命周期。另外,根据数据系统的内部和外部参数特点,可以将缓存中的缓存对象划分为系统内部固定参数和系统外部请求参数。比如说,银联数据处理系统中的建设银行的通道状况、建设银行的支付额度限制等这类参数就属性系统内部固定参数,这类参数被重复访问的频率高;另一种系统外部请求参数通常指的是来自用户的数据请求,比如用户A下订单时生成利用用户A的建行银行账号XXXXX支付200元的请求,这类数据请求中的参数是不固定,可能用户A请求了一次之后,就注销了该账户,就没有下次了。

当预先确定了缓存中的缓存对象的相关信息之后,本发明实施例对缓存对象进行分析,确定出目标缓存对象,然后对目标缓存对象进行预更新,即在所述目标缓存对象的缓存失效时间发生时,从数据库服务器中获取与目标缓存对象的关键值相同的实时数据对象,或者,在距离所述目标缓存对象的缓存失效时间发生前的设定时间段内,从数据库服务器中获取与目标缓存对象的关键值相同的实时数据对象。进而将所述实时数据对象写入所述缓存,同时生成所述实时数据对象的缓存失效时间。

换句话说,本发明实施例对系统内部固定参数进行预更新,即在缓存对象失效时,启动更新任务,从数据库或者其它节点中获取最新的数据更新至缓存中,以此保证系统内部固定参数始终有效;对于系统外部请求参数,则需要根据其被访问的频率次数决定,如果某个缓存对象在一次生命周期内被重复访问过多次,则估计其下次再次被访问的可能性很大,因此可以在其缓存失效时,对其进行预更新。比如,缓存中的一个数据属性为系统内部固定参数的缓存对象的创建时间是10:00,有效生命时长为半小时,该缓存对象的缓存失效时间为10:30,因此可以提前创建一个更新任务,在缓存失效时间10:30发生时,启动该任务,该任务主要是从数据库或者其它节点获取最新数据,然后写入至缓存中,同时将该缓存对象的缓存失效时间进行更新。又或者,该任务在缓存失效时间到达前的五分钟执行即10:25,该任务从数据库或者其它节点获取最新数据后,删除缓存中的该缓存对象,然后写入至缓存中,同时将该缓存对象的缓存失效时间进行更新。

具体地,对于缓存中数据属性为系统内部固定参数的缓存对象,按照实际失效时间作为定时访问数据库时间,提前访问数据库或其他应用节点按照一定规则组成key同时将value写入数据缓存。本发明实施例通过定时刷新银行卡列表信息为例,进行举例说明,具体如下:

第一步,定时任务添加

关键参数分别指:

jobName即定时任务名称旨在区分不同定时任务;

cronExpression即定时任务触发时间按照正则表达式实现个性化定时任务的实现。

此方法为实际调用定时刷新银行卡列表信息,写入缓存

第二步,写入缓存

此方法三个参数分别指:

cacheKey即缓存的标签名称旨在通过标签名称找到值;

mapValue为写入缓存的实际值;

cronExpression实际缓存失效时间及相关规则配置

可见,通过web请求访问数据库查询数据并使用缓存数据进行读写,使用定时任务提前准备查询数据放入缓存中,保证缓存数据实时更新的同时,缓存数据无实际失效过程。

另一方面,对于缓存中数据属性为系统外部请求参数的缓存对象,预先统计在一个生命周期内,该参数被访问的次数,若大于设定阈值,则说明下一生命周期被访问的可能性大,因此按照实际失效时间作为定时访问数据库时间,提前访问数据库或其他应用节点按照一定规则组成key同时将value写入数据缓存。本发明实施例通过定时刷新银行卡列表信息为例,进行举例说明,代码片段如下:

第一步,请求对象介绍

第二步,异步获取缓存值

第三步,异步线程池写入缓存值

此方法为启动异步任务,进行缓存数据更新。其中cacheKey为缓存key值,bizTimeout为业务超时时长,args为传入业务值。通过异步线程在实际缓存失效前执行,始终保证请求获取数据为缓存数据。

可见,上述方法可以解决由于短时间内请求已写入数据缓存的重复且相同数据(路径),缓存穿透造成对应用节点不必要的网络开销。服务端通过缓存客户端请求缓存服务端,请求存在两个缓存时间分别为业务缓存时间和实际失效时间。默认为业务失效时间小于实际缓存时间,当业务失效时间小于当前时间时,单线程完成一次异步更新缓存。

进一步地,所述将所述实时数据对象写入所述缓存之后,还包括:当将所述实时数据对象写入所述缓存后,确定所述缓存中与所述实时数据对象创建时间相同的缓存对象的第一缓存失效时间集合;生成所述实时数据对象的缓存失效时间,其中,所述实时数据对象的缓存失效时间与所述第一缓存失效时间集合中的缓存失效时间不同。

也就是说,若一次更新缓存时更新的缓存对象较多,可以将该次更新的缓存对象的缓存失效时间错开,即更新后的缓存对象的缓存失效时间不同,这样,就可以有效地避免下一次执行缓存更新时,一次执行的缓存处理数据量过大,有效地降低系统发生拥堵的可能性。

需要说明的是,目前应用系统通常接收到的请求中既有系统内部固定参数,也会涉及到系统外部请求参数,因此通常需要结合上述两种更新过程,对缓存中的缓存对象进行更新,例如,已经投入生产涉及银联钱包生产多个应用如客户端后台接口应用、客户端后台应用、支付商户扫码后台等。如银联钱包扫码付付款码过滤不支持银行列表清单,操作步骤如下:用户点击银联钱包客户端——》点击添加银行卡——》输入卡信息——》绑卡成功——》点击付款码。

其中,选择扫码银行卡列表信息涉及到过滤不支持银联钱包扫码付,如图4所示,此环节涉及到使用本发明实施例中提供的缓存管理方法,通过用户id使用异步更新缓存的方式访问数据缓存,同时将不支持银行卡列表信息通过定时查询数据库的方式放入数据缓存。当有用户发送请求生成付款码并选择银行卡时,获取数据缓存中不支持银行卡列表信息过滤之后,组装报文放回客户端。

也就是说,本发明实施例提供的缓存管理方法可以解决由于高并发下请求已写入数据缓存的固定参数和参数请求相结合数据,缓存穿透造成数据库或其他节点并发异常增大。当客户端请求数据同时存在访问数据库获取默认数据请求以及按照用户或不同维度个性化数据请求,此时需要使用本发明实施例提供的缓存管理方法。具体地,如图5所示,先剥离现有的数据请求层、数据缓存层、数据库(或其他服务终端)之间的实时强关联,然后分成两个部分分别数据访问的过程。

第一部分

步骤1,web客户端101发送请求到web服务器端102,web服务器端102成功收到请求。

步骤2,web服务器端102通过Cache客户端发送组装好的相关key值,请求Cache服务器端103中的缓存数据。

步骤3,Cache服务器端103通过Key值获缓存数据获取值。

步骤4,web服务器端102组装相关缓存数据请求及处理业务逻辑后,以报文形式发送web客户端101。

第二部分

步骤I,按照业务逻辑时间作为定时任务发起周期,通过web服务器端102查询数据库(其他应用节点);web客户端101中的浏览器节点发起是业务逻辑逻辑时间小于本地时间,发起异步缓存更新请求查询数据库(其他应用节点);

步骤II,web服务器端102查询数据库(其他应用节点)获取数据,返回Server端并予以业务逻辑处理。

步骤Ⅲ通过web服务器端102调用Cache客户端发送写数据请求到Cache服务器端103。

步骤ⅣCache服务器端103写入数据后返回应答到web服务器端102。

综上,本发明实施例提供的缓存管理方法可以解决大多数缓存穿透造成的应用雪崩问题,满足批量大数据及个性化请求数据对于高并下访问缓存数据的应用场景。而且通过JMeter压力测试,当Browns客户端请求达到500个线程思考时间为500毫秒,此时单点缓存失效时间为1分钟,压测时间周期为30分钟。当未使用本示例解决方案,通过Browns客户端发送请求到Server端瞬时1分钟数据缓存穿透,瞬时数据库最大连接数达到200(设置最大值)个。

基于相同的技术构思,本发明实施例还提供一种缓存管理装置,该装置可执行上述方法实施例。本发明实施例提供的装置如图6所示,包括:确定单元401、获取单元402、写入单元403、生成单元404,其中:

确定单元401,用于确定缓存中的目标缓存对象,所述目标缓存对象是数据属性为系统内部配置的缓存对象,和/或在当前生命周期内的被访问次数大于设定阈值系统外部配置的缓存对象;

获取单元402,用于根据所述目标缓存对象的缓存失效时间,从数据库服务器中获取与目标缓存对象的关键值相同的实时数据对象;

写入单元403,用于将所述实时数据对象写入所述缓存;

生成单元404,用于生成所述实时数据对象的缓存失效时间。

进一步地,,所述获取单元402具体用于:在所述目标缓存对象的缓存失效时间发生时,从数据库服务器中获取与目标缓存对象的关键值相同的实时数据对象。

进一步地,,所述获取单元402具体用于:在距离所述目标缓存对象的缓存失效时间发生前的设定时间段内,从数据库服务器中获取与目标缓存对象的关键值相同的实时数据对象。

进一步地,所述装置还包括:删除单元405,用于删除所述缓存中所述缓存失效时间在所述设定时间段内即将发生的目标缓存对象。

进一步地,所述确定单元401还用于:当将所述实时数据对象写入所述缓存后,确定所述缓存中与所述实时数据对象创建时间相同的缓存对象的第一缓存失效时间集合。

进一步地,所述生成单元404具体用于:生成所述实时数据对象的缓存失效时间,其中,所述实时数据对象的缓存失效时间与所述第一缓存失效时间集合中的缓存失效时间不同。

综上所述,本发明实施例,预先获取缓存中的每个缓存对象的数据属性和缓存失效时间,根据每个缓存的数据属性确定出系统内部固定参数,将数据属性为系统内部固定参数的缓存对象确定为目标缓存对象;同时将数据属性为系统外部请求参数的缓存对象且在当前生命周期内的被访问次数大于设定阈值的缓存对象确定为目标缓存对象,这样,根据目标缓存对象的缓存失效时间,对目标缓存进行更新操作,更新的方法是从数据库服务器中获取与目标缓存对象的关键值相同的实时数据对象,将所述实时数据对象写入所述缓存,同时生成所述实时数据对象的缓存失效时间,这样相当于对目标缓存进行预刷新,使得目标缓存在被用户请求时始终是有效的,因此本发明实施例可以做到尽可能避免发生缓存穿透,从而降低发生缓存雪崩的概率,提高了数据处理系统的稳定性。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

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