缓存控制方法、装置、终端及存储介质与流程

文档序号:17160346发布日期:2019-03-20 00:36阅读:174来源:国知局
缓存控制方法、装置、终端及存储介质与流程

本发明涉及数据处理技术领域,尤其涉及一种缓存控制方法、装置、终端及存储介质。



背景技术:

随着信息技术和网络技术的发展,缓存技术逐渐成为不可或缺的领域,在用于缓解数据源如数据库压力方面发挥着重要作用,能够在一定程度上提高系统的并发性和响应用户请求的速度。

目前在分布式系统中,配置类信息更新频率比较低,允许一定的数据延迟,利用该延迟可对数据进行缓存服务。然而系统在缓存数据时为缓存的数据设置了缓存的有效时间,在缓存未失效之前,该系统可以命中缓存并快速返回命中结果。但是,若缓存失效,尤其是在高并发场景,多个并发请求瞬间涌入,如果控制不恰当,多个并发请求都去请求数据源如数据库,导致数据源cpu和内存负载过高,从而造成缓存雪崩情况。



技术实现要素:

本发明实施例提供一种缓存控制方法、装置、终端及存储介质,通过有效的对缓存进行控制,能够避免缓存雪崩的情况,提高了系统的稳定性和吞吐量。

第一方面,本发明实施例提供了一种缓存控制方法,该方法包括:

若接收到任一线程对缓存中共有资源的访问请求,且确定所述共有资源中包括与所述访问请求匹配的目标缓存数据,则获取所述目标缓存数据的预警时间和无效时间;

若检测到该线程的访问请求时间大于所述预警时间且小于所述无效时间,且数据源中对应的数据项的分布式锁处于非加锁状态,则为该线程分配异步加锁线程;

响应该线程基于所述异步加锁线程对所述数据源的访问,并控制更新缓存中的目标缓存数据以及所述目标缓存数据的预警时间和无效时间。

第二方面,本发明实施例还提供了一种缓存控制装置,该装置包括:

时间获取模块,用于若接收到任一线程对缓存中共有资源的访问请求,且确定所述共有资源中包括与所述访问请求匹配的目标缓存数据,则获取所述目标缓存数据的预警时间和无效时间;

异步线程确定模块,用于若检测到该线程的访问请求时间大于所述预警时间且小于所述无效时间之间,且数据源中对应的数据项的分布式锁处于非加锁状态,则为该线程分配异步加锁线程;

更新模块,用于响应该线程基于所述异步加锁线程对所述数据源的访问,并控制更新缓存中的目标缓存数据以及所述目标缓存数据的预警时间和无效时间。

第三方面,本发明实施例还提供了一种终端,该终端包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序;

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现第一方面中任一所述的缓存控制方法。

第四方面,本发明实施例还提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任一所述的缓存控制方法。

本发明实施例提供的缓存控制方法、装置、终端及存储介质,终端在接收到任一线程对缓存中共有资源的访问请求且确定共有资源中包括该访问请求关联的目标缓存数据后,获取该目标缓存数据的预警时间和无效时间;在检测到该线程访问请求时间介于预警时间和无效时间之间,且该目标缓存数据所关联的数据源中的数据项的分布式锁处于非加锁状态,则为该线程分配异步加锁线程,同时响应该线程基于异步加锁线程从数据源中获取目标缓存数据对应的数据,并控制对缓存中的目标数据以及目标缓存数据的预警时间和无效时间进行更新。该方案,通过为目标缓存数据设置预警时间,在目标缓存数据无效之前,及时采用异步加锁线程对缓存中的目标缓存数据、预警时间及无效时间进行更新,使得缓存中的目标缓存数据始终处于有效状态,从而避免出现高并发系统下多个线程同时穿透缓存从数据源中查找数据的现象,进而避免缓存雪崩的情况,提高了系统的稳定性和吞吐量。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1是本发明实施例一中提供的一种缓存控制方法的流程图;

图2是本发明实施例二中提供的一种缓存控制方法的流程图;

图3a是本发明实施例三中提供的一种缓存控制方法的流程图;

图3b是本发明实施例三中提供的一种缓存控制方法的示意图;

图4是本发明实施例四中提供的一种缓存控制装置的结构框图;

图5是本发明实施例五中提供的一种终端的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。

实施例一

图1为本发明实施例一中提供的一种缓存控制方法的流程图,本实施例基于如何有效对缓存进行管控,以避免出现雪崩的情况。尤其适用于多线程并发请求(即高并发)场景下对缓存的控制。该方法可以由本发明实施例提供的缓存控制装置来执行,该装置可采用软件和/或硬件的方式实现,可配置于终端或计算设备中,参见图1,该方法具体包括:

s110,若接收到任一线程对缓存中共有资源的访问请求,且确定共有资源中包括与访问请求匹配的目标缓存数据,则获取目标缓存数据的预警时间和无效时间。

本实施例中,缓存是临时文件的交换区,用于存储临时数据;共有资源是指存储于缓存中、线程间可交替使用的共享资源,可以包括更新具有一定数据延迟的配置类数据或资源类数据等;访问请求是指线程用于访问缓存中共有资源的请求,可以包括共有资源的标识、线程的标识及访问时长等。共有资源的标识可以是共有资源的名称、地址或缓存值(关键值)等;线程的标识可以包括线程的id、编号或名称等;访问时长用于告知终端该线程此次访问共有资源所需要时间的上限值。本实施例中,线程对缓存中共有资源的访问请求可以为读取请求。

目标缓存数据即为线程本次请求所要访问的共有资源。可通过如下方式确定:当终端接收到任一线程对缓存中共有资源的访问请求,则可以依据访问请求中共有资源的标识在缓存的共有资源中进行查找,若查找到与之相匹配的标识,则确定共有资源中包括与访问请求匹配的目标缓存数据。为了使查询速度快、存放数据量大、支持高并发,示例性的,缓存中的共有资源可以以key(缓存值或关键值)-value(数据)键值对的形式存储,并存储对应的索引表。对应的,确定共有资源中包括与访问请求匹配的目标缓存数据可以包括:依据访问请求中的缓存值查询共有资源;若共有资源中存在与缓存值匹配的目标缓存数据,则确定共有资源中包括与访问请求匹配的目标缓存数据。

其中,缓存值是缓存中共有资源标识中的一项,能够用于快速定位到所需共有资源。可选的,缓存值具有唯一性,缓存中不同的缓存值对应不同的共有资源。具体的,当终端接收到任一线程对缓存中共有资源的访问请求,则可以依据访问请求中的缓存值在共有资源或缓存中存储的索引表中进行查找;若共有资源中存在与缓存值相匹配的目标缓存数据,则可以确定共有资源中包括与访问请求所需要的共有资源相匹配的目标缓存数据。若共有资源中不存在与缓存值相匹配的目标缓存数据;则确定共有资源中不包括与访问请求匹配的目标缓存数据,也就是说线程所需要访问的数据未存储在缓存中或数据已失效被清除。

本实施例中,有效时长即为一个共有资源的生命周期;无效时间是指某一共有资源一个生命周期结束的时刻即失效时刻;预警时间是一种触发预警的手段,用于告知终端存储在缓存中的某一共有资源的生命周期即将结束。对应的,目标缓存数据的无效时间即为目标缓存数据在缓存中一个生命周期失效的时刻;目标缓存数据的预警时间即为用于触发告知终端目标缓存数据的生命周期即将失效的时刻。可选的,还可以将目标缓存数据的一个有效时长内,目标缓存数据写入缓存的时间至预警时间之间的时长称为预警时长,将预警时间至无效时间之间的时长称为无效时长。

需要说明的是,存储在缓存中的每个共有资源的预警时间和无效时间均可以基于其属性、写入缓存的时间、有效时长、预警时长及无效时长等设定,共有资源不同,对应的预警时间和无效时间也可能不同。可选的,预警时间为无效时间之前的某一时间。例如,一个共有资源写入缓存的时间为10:00,有效时长是5分钟,则可以设定其无效时间为10:05,预警时间可以为10:03。可选的,缓存中的共有资源是可以更新的;对应的,一个共有资源的预警时间和无效时间可依据该共有资源的更新而动态的调整。而一个共有资源的预警时长和无效时长在该共有资源写入缓存中后,就已确定的,是固定的。

示例性的,缓存中可以维护一个包括共有资源标识、写入时间、预警时间、无效时间、预警时长以及无效时长等的资源信息索引表。该索引表可以依据实际情况动态的调整每个共有资源的相关信息,也可以动态的增加或删除某个共有资源的相关信息。

具体的,当终端接收到任一线程对缓存中共有资源的访问请求,且依据访问请求中包括的共有资源的标识确定共有资源中包括与该访问请求相匹配的目标缓存数据,则可以从资源索引表中获取该目标缓存数据的相关信息,如目标缓存数据的预警时间、无效时间、写入缓存的时间、预警时长以及无效时长等。

s120,若检测到该线程的访问请求时间大于预警时间且小于无效时间,且数据源中对应的数据项的分布式锁处于非加锁状态,则为该线程分配异步加锁线程。

本实施例中,访问请求时间即为终端接收到该线程访问请求的时间;数据源是指缓存中存储的共有资源所对应的资源方,可以为数据库、业务系统等。数据源中一类业务数据可以为一个数据项;缓存中存储的共有资源可以属于数据源中的一个数据项,也可以对应多个数据项。分布式锁是指分布式系统控制线程之间访问数据源的一种方式。需要说明的是,为了避免数据项之间相互影响以及减少数据源的在高并发场景下的压力,可为数据源中每个数据项设置一个分布式锁,同一时刻可以有不同的线程同时对数据源中不同的数据项进行访问,但同一时刻只能存在一个线程对数据源中某一数据项进行访问,即线程独占数据源中数据项。例如,某一时刻,线程a对数据项a进行访问,若此时线程b也要对数据项a进行访问,终端将拒绝线程b的访问;若此时线程b要对数据项b进行访问,且该时刻没有任何线程正对数据项b进行访问,则终端将响应线程b对数据项b的访问。

非加锁状态是指线程所要访问的数据源中对应的数据项的分布式锁未分配给其它线程的状态。异步加锁线程是指对终端预先为访问数据源所设定的异步加载线程加上分布式锁后得到的;异步加载线程位于线程池中,是终端专门为用于访问数据源所开设的线程,响应速度快。

例如,若终端检测到该线程的访问请求时间为10:04,且该线程所要访问的目标缓存数据的预警时间为10:03,无效时间为10:06,则可以确定该线程的访问请求时间大于预警时间且小于无效时间;终端就会自动对数据源中目标缓存数据所关联的数据项的分布式锁的状态进行检测,若检测到数据源中对应的数据项的分布式锁处于非加锁状态,则将从线程池中选择一个异步加载线程同时为该异步加载线程加上对应的分布式锁分配给该线程,以使该线程基于异步加载线程对数据源中对应的数据项进行访问。

示例性的,获取缓存数据的预警时间和无效时间之后还可以包括:若检测到该线程的访问请求时间未达到预警时间,则响应该线程对缓存中共有资源的访问请求。具体的,若终端检测到该线程的访问请求时间小于目标缓存数据的预警时间,例如,该线程的访问请求时间为10:04,且该线程所要访问的目标缓存数据的预警时间为10:05,则可以直接响应该线程对缓存中共有资源的访问请求,即将目标缓存数据反馈给该线程,也就是说允许该线程从缓存中读取目标缓存数据。

需要说明的是,同一时刻,若存在多个线程并行访问缓存中的同一共有资源,且均未达到该共有资源的预警时间,则终端将同时响应多个线程的访问请求。若达到该共有资源的预警时间但未达到其无效时间,终端则将为接收到的第一个线程分配一个异步加锁线程,以使该线程基于所述异步加锁线程访问数据源中对应的数据项。此外,同一时刻,访问不同共有资源之间的线程是互不影响,且访问数据源中的线程也是互不影响的。

s130,响应该线程基于异步加锁线程对数据源的访问,并控制更新缓存中的目标缓存数据以及目标缓存数据的预警时间和无效时间。

本实施例中,终端可以控制自身更新缓存中的目标缓存数据以及目标缓存数据的预警时间和无效时间,也可以控制该线程更新缓存中的目标缓存数据以及目标缓存数据的预警时间和无效时间。

具体的,在终端将异步加锁线程分配该线程后,该线程将基于异步加锁线程对数据源中对应的数据项进行访问;终端响应该线程基于异步加锁线程对数据源中对应的数据项的访问,从数据源中对应的数据项中重新加载访问请求所关联的存储数据,将该存储数据基于异步加锁线程反馈给该线程;同时终端或终端控制该线程用该存储数据更新缓存中的目标缓存数据;可利用该存储数据更新目标缓存数据的时间、该目标缓存数据的有效时长、预警时长和无效时长等更新该目标缓存数据的预警时间和无效时间。

需要说明的是,本实施例中,在目标缓存数据未达到无效时间即对目标缓存数据、预警时间和无效时间进行更新,使得在缓存中的目标缓存数据始终处于有效状态,从而避免出现高并发系统下多个线程同时穿透缓存从数据源中查找数据的现象,进而避免缓存雪崩的情况。

本发明实施例提供的技术方案,终端在接收到任一线程对缓存中共有资源的访问请求且确定共有资源中包括该访问请求关联的目标缓存数据后,获取该目标缓存数据的预警时间和无效时间;在检测到该线程访问请求时间介于预警时间和无效时间之间,且该目标缓存数据所关联的数据源中的数据项的分布式锁处于非加锁状态,则为该线程分配异步加锁线程,同时响应该线程基于异步加锁线程从数据源中获取目标缓存数据对应的数据,并控制对缓存中的目标数据以及目标缓存数据的预警时间和无效时间进行更新。该方案,通过为目标缓存数据设置预警时间,在目标缓存数据无效之前,及时采用异步加锁线程对缓存中的目标缓存数据、预警时间及无效时间进行更新,使得缓存中的目标缓存数据始终处于有效状态,从而避免出现高并发系统下多个线程同时穿透缓存从数据源中查找数据的现象,进而避免缓存雪崩的情况,提高了系统的稳定性和吞吐量。

实施例二

图2为本发明实施例二中提供的一种缓存控制方法的流程图,本实施例在上述实施例的基础上,进一步的对响应异步加锁线程对数据源的访问,并控制更新缓存中的目标缓存数据以及目标缓存数据的预警时间和无效时间进行解释说明。参见图2,该方法具体包括:

s210,若接收到任一线程对缓存中共有资源的访问请求,且确定共有资源中包括与访问请求匹配的目标缓存数据,则获取目标缓存数据的预警时间和无效时间。

s220,若检测到该线程的访问请求时间大于预警时间且小于无效时间,且数据源中对应的数据项的分布式锁处于非加锁状态,则为该线程分配异步加锁线程。

s230,响应该线程基于异步加锁线程对数据源的访问,控制依据访问请求中的缓存值从数据源中重新加载缓存值关联的存储数据。

其中,存储数据是指存储于数据源中的数据,也是存储于缓存中的目标缓存数据的来源。存储于缓存中的共有资源在数据源中都可查找到其对应的存储数据。具体的,终端响应该线程基于异步加锁线程对数据源的访问后,可以依据访问请求中的缓存值从数据源中对应的数据项中查找该缓存值关联的存储数据,并重新加载该存储数据,而后将该存储数据基于异步加锁线程反馈给该线程,同时用该存储数据更新缓存中的目标缓存数据。还可以是终端控制该线程基于异步加锁线程,依据访问请求中的缓存值从数据源中对应的数据项中查找该缓存值关联的存储数据,并重新加载该存储数据,同时用该存储数据更新缓存中的目标缓存数据。

s240,控制用重新加载的存储数据替换缓存中的目标缓存数据。

具体的,终端或该线程基于缓存值定位到缓存中目标缓存数据,而后将该目标存储数据删除,用重新加载的存储数据作为新的目标缓存数据写入缓存中。

s250,控制依据目标缓存数据的预警时长、无效时长和重新加载的存储数据写入缓存中的时间,重置目标缓存数据的预警时间和无效时间。

本实施例中,共有资源的预警时长和无效时长与共有资源的更新次数无关,是在共有资源首次写入缓存时,基于共有资源的属性设定的,是固定的;而共有资源的预警时间和无效时间则依据共有资源的更新而更新。

目标缓存数据的预警时长和无效时长即为目标缓存数据首次写入缓存是设定,预警时长是指在目标缓存数据的一个有效时长内,目标缓存数据写入缓存的时间至目标缓存数据的预警时间之间的时长;对应的,无效时长是指在目标缓存数据的一个有效时长内,预警时间至无效时间之间的时长称为无效时长。

具体的,终端或该线程可在重新加载的存储数据写入缓存中的时间基础上加上目标缓存数据的预警时长即可重新确定目标缓存数据的预警时长;对应的,在可在重新加载的存储数据写入缓存中的时间基础上加上目标缓存数据的无效时长即可重新确定目标缓存数据的无效时长。例如,目标缓存数据的预警时长为3分钟,无效时长为5分钟,重新加载的存储数据写入缓存的时间为10:30,则可以确定重新写入缓存的目标缓存数据的预警时间为10:33,无效时间为10:35。

本发明实施例提供的技术方案,终端在接收到任一线程对缓存中共有资源的访问请求且确定共有资源中包括该访问请求关联的目标缓存数据后,获取该目标缓存数据的预警时间和无效时间;在检测到该线程访问请求时间介于预警时间和无效时间之间,且该目标缓存数据所关联的数据源中的数据项的分布式锁处于非加锁状态,则为该线程分配异步加锁线程,同时响应该线程基于异步加锁线程从数据源中获取目标缓存数据对应的数据,并控制对缓存中的目标数据以及目标缓存数据的预警时间和无效时间进行更新。该方案,通过为目标缓存数据设置预警时间,在目标缓存数据无效之前,及时采用异步加锁线程对缓存中的目标缓存数据、预警时间及无效时间进行更新,使得缓存中的目标缓存数据始终处于有效状态,从而避免出现高并发系统下多个线程同时穿透缓存从数据源中查找数据的现象,进而避免缓存雪崩的情况,提高了系统的稳定性和吞吐量。

实施例三

图3a为本发明实施例三中提供的一种缓存控制方法的流程图,图3b为本发明实施例三中提供的一种缓存控制方法的示意图;本实施例在上述实施例的基础上,进一步的优化。参见图3a和3b,该方法具体包括:

s301,若接收到任一线程对缓存中共有资源的访问请求,判断共有资源中是否包括与访问请求匹配的目标缓存数据;若是,则执行步骤s302;若否,则执行步骤s307。

s302,获取目标缓存数据的预警时间和无效时间。

s303,判断该线程的访问请求时间是否大于预警时间;若否,则执行步骤s304;若是,则执行步骤s305。

s304,响应该线程对缓存中共有资源的访问请求。

s305,若检测到该线程的访问请求时间大于预警时间且小于无效时间,且数据源中对应的数据项的分布式锁处于非加锁状态,则将该线程作为异步加锁线程。

s306,响应异步加锁线程对数据源的访问,并控制更新缓存中的目标缓存数据以及目标缓存数据的预警时间和无效时间。

s307,检测数据源中对应的数据项的分布式锁是否处于非加锁状态。若是,则执行步骤s308;若否,则执行步骤s311。

s308,将数据源中对应的数据项的分布式锁分配给该线程,以将该线程作为同步加锁线程。

其中,同步加锁线程与异步加锁线程相对应,是指在发送访问请求的该线程上加上分布式锁。

具体的,若终端接收到任一线程对缓存中共有资源的访问请求,且确定共有资源中不包括与访问请求匹配的目标缓存数据,则依据访问请求中包括的缓存值检测数据源中对应的数据项的分布式锁是否处于非加锁状态,若数据源中对应的数据项的分布式锁处于非加锁状态,则可以将该分布式锁分配给该线程,以使该线程作为同步加锁线程访问数据源。若数据源中对应的数据项的分布式锁处于加锁状态,则拒绝该线程对数据源的访问即执行步骤s311,该线程可以处于等待状态;若该线程所访问的目标缓存数据与同步加锁线程正在从数据源中对应的数据项中加载的存储数据相同,则在同步加锁线程释放分布式锁后,终端将响应该线程对缓存中共有资源的访问。

s309,响应同步加锁线程对数据源的访问,控制依据访问请求中的缓存值从数据源中加载缓存值关联的存储数据。

具体的,终端响应该同步加锁线程对数据源的访问,依据访问请求中的缓存值从数据源中对应的数据项中查找该缓存值关联的存储数据,并加载该存储数据,而后将该存储数据反馈给该同步加锁线程,同时将该存储数据作为目标缓存数据写入缓存中,以便其它线程快速访问。或者是,终端控制该线程依据访问请求中的缓存值从数据源中对应的数据项中查找该缓存值关联的存储数据,并加载该存储数据,同时将该存储数据作为目标缓存数据写入缓存中。

s310,控制将存储数据作为目标缓存数据写入缓存中,并基于目标缓存数据的属性设置目标缓存数据的预警时间和无效时间。

本实施例中,共有资源的属性即为共有资源的业务特性,可以包括共有资源数据更新延迟时长。目标缓存数据的数据可以包括目标缓存数据的更新延迟时长。

具体的,终端或该线程将从数据源中对应的数据项中获取的,与访问请求的缓存值关联的存储数据作为目标缓存数据写入缓存中,并基于目标缓存数据中属性、目标缓存数据写入缓存的时间设置该目标缓存数据的预警时间和无效时间。

示例性的,终端将存储数据作为目标缓存数据写入缓存中,并基于目标缓存数据的属性设置目标缓存数据的预警时间和无效时间之后,还可以包括:释放同步加锁线程中的分布式锁,使数据源中对应的数据项的分布式锁处于非加锁状态。

s311,拒绝该线程对数据源的访问。

以图3b所示的缓存控制示意图为例进行说明。图3b示例展示了一个共有资源作为目标缓存数据被访问的情况,其它的也均适用,该共有资源的预警时间即alarmtime;无效时间即expiretime。水平线为时间轴,在缓存处于初始化状态,即无缓存时,存在多个线程并发请求缓存中的共有资源,满足步骤s301中否的结果,执行步骤s307终端检测数据源中对应的数据项的分布式锁是否处于非加锁状态,若此时数据源中对应的数据项的分布式锁处于非加锁状态,获取该数据项的分布式锁的线程将作为同步加锁线程访问数据源中对应的数据项中的存储数据,而其它线程将处于锁等待状态,终端或该同步加锁线程执行将存储数据写入缓存,并为其设置预警时间和无效时间的操作;在终端检测到该存储数据已写入缓存后,将释放该同步加锁线程获取的分布式锁,并响应其它线程对缓存中共有资源的访问。

而后,对于未达到该共有资源的预警时间的访问请求,终端将给予响应,把对应的共有资源返回给该线程;若任一线程的访问请求时间大于该线程的预警时间且小于无效时间,即满足步骤s301中是的情况,终端将执行步骤302至s306的操作。

本发明实施例提供的技术方案,终端通过为目标缓存数据设置预警时间,并对预警时间进行实时监测,进而保证在目标缓存数据无效之前,及时采用异步加锁线程对缓存中的目标缓存数据、预警时间及无效时间进行更新,使得缓存中的目标缓存数据始终处于有效状态,从而避免出现高并发系统下多个线程同时穿透缓存从数据源中查找数据的现象,进而避免缓存雪崩的情况,提高了系统的稳定性和吞吐量。

实施例四

图4为本发明实施例四提供的一种缓存控制装置的结构框图,该装置可执行本发明任意实施例所提供的缓存控制方法,具备执行方法相应的功能模块和有益效果。如图4所示,该装置可以包括:

时间获取模块410,用于若接收到任一线程对缓存中共有资源的访问请求,且确定共有资源中包括与访问请求匹配的目标缓存数据,则获取目标缓存数据的预警时间和无效时间;

异步线程确定模块420,用于若检测到该线程的访问请求时间大于预警时间且小于无效时间之间,且数据源中对应的数据项的分布式锁处于非加锁状态,则为该线程分配异步加锁线程;

更新模块430,用于响应该线程基于异步加锁线程对数据源的访问,并控制更新缓存中的目标缓存数据以及目标缓存数据的预警时间和无效时间。

本发明实施例提供的技术方案,终端在接收到任一线程对缓存中共有资源的访问请求且确定共有资源中包括该访问请求关联的目标缓存数据后,获取该目标缓存数据的预警时间和无效时间;在检测到该线程访问请求时间介于预警时间和无效时间之间,且该目标缓存数据所关联的数据源中的数据项的分布式锁处于非加锁状态,则为该线程分配异步加锁线程,同时响应该线程基于异步加锁线程从数据源中获取目标缓存数据对应的数据,并控制对缓存中的目标数据以及目标缓存数据的预警时间和无效时间进行更新。该方案,通过为目标缓存数据设置预警时间,在目标缓存数据无效之前,及时采用异步加锁线程对缓存中的目标缓存数据、预警时间及无效时间进行更新,使得缓存中的目标缓存数据始终处于有效状态,从而避免出现高并发系统下多个线程同时穿透缓存从数据源中查找数据的现象,进而避免缓存雪崩的情况,提高了系统的稳定性和吞吐量。

示例性的,时间获取模块410在确定共有资源中包括与访问请求匹配的目标缓存数据时具体用于:

依据访问请求中的缓存值查询共有资源;

若共有资源中存在与缓存值匹配的目标缓存数据,则确定共有资源中包括与访问请求匹配的目标缓存数据。

示例性的,更新模块430具体可以用于:

响应异步加锁线程对数据源的访问,控制依据访问请求中的缓存值从数据源中重新加载缓存值关联的存储数据;

控制用重新加载的存储数据替换缓存中的目标缓存数据;

控制依据目标缓存数据的预警时长、无效时长和重新加载的存储数据写入缓存中的时间,重置目标缓存数据的预警时间和无效时间。

示例性的,上述装置还可以包括:

访问响应模块,用于在获取缓存数据的预警时间和无效时间之后,若检测到该线程的访问请求时间未达到预警时间,则响应该线程对缓存中共有资源的访问请求。

示例性的,上述装置还可以包括:

锁检测模块,用于若接收到任一线程对缓存中共有资源的访问请求,且确定共有资源中不包括与访问请求匹配的目标缓存数据,则检测数据源中对应的数据项的分布式锁是否处于非加锁状态;

锁分配模块,用于若数据源中对应的数据项的分布式锁处于非加锁状态,则将数据源中对应的数据项的分布式锁分配给该线程,以将该线程作为同步加锁线程;

数据加载模块,用于响应同步加锁线程对数据源的访问,控制依据访问请求中的缓存值从数据源中加载缓存值关联的存储数据;

时间设置模块,用于控制将存储数据作为目标缓存数据写入缓存中,并基于目标缓存数据的属性设置目标缓存数据的预警时间和无效时间。

示例性的,上述装置还可以包括:

访问拒绝模块,用于检测数据源的分布式锁是否处于非加锁状态之后,若检测到数据源中对应的数据项的分布式锁处于加锁状态,则拒绝该线程对数据源的访问。

实施例五

图5为本发明实施例五提供的一种终端的结构示意图。图5示出了适于用来实现本发明实施方式的示例性终端12的框图。图5显示的终端12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图5所示,该终端12以通用计算设备的形式表现。该终端12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。

总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(isa)总线,微通道体系结构(mac)总线,增强型isa总线、视频电子标准协会(vesa)局域总线以及外围组件互连(pci)总线。

终端12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被终端12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。

系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(ram)30和/或高速缓存存储器32。终端12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图5未显示,通常称为“硬盘驱动器”)。尽管图5中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如cd-rom,dvd-rom或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。

具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。

终端12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该设备交互的设备通信,和/或与使得该终端12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口22进行。并且,终端12还可以通过网络适配器20与一个或者多个网络(例如局域网

(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与终端12的其它模块通信。应当明白,尽管图中未示出,可以结合终端12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。

处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的缓存控制方法。

实施例六

本发明实施例六还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时可实现上述实施例中任一所述的缓存控制方法。

本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络包括局域网(lan)或广域网(wan)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

上述实施例序号仅仅为了描述,不代表实施例的优劣。

本领域普通技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个计算装置上,或者分布在多个计算装置所组成的网络上,可选地,他们可以用计算机装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件的结合。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间的相同或相似的部分互相参见即可。

以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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