一种缓存方法及装置的制造方法

文档序号:9687553阅读:307来源:国知局
一种缓存方法及装置的制造方法
【技术领域】
[0001 ]本申请涉及数据缓存技术领域,尤其涉及一种缓存方法及装置。
【背景技术】
[0002]随着互联网技术的发展,越来越多的用户通过客户端发起请求向服务器请求某种服务或者查找数据。例如,通过手机上的客户端查询话费,使用手机上的应用程序购物等等。
[0003]现有技术中,当客户端需要向服务器请求服务时,首先会建立服务器与客户端的连接关系,在连接关系建立之后,客户端通过建立的连接向服务器请求需要的服务,在获取需要的服务之后,则释放连接。
[0004]上述现有技术主要存在以下问题:在特定的情形,如电商秒杀,有海量客户端的请求到达服务器并且请求的服务类型都类似,如请求查询商品价格,针对该情形下,由于每次都需要建立客户端与服务器的连接,然后提供向客户端提供服务,在客户端获取需要的服务之后,则释放连接,因而非常浪费资源,且无法满足瞬时海量请求,效率低下。

【发明内容】

[0005]本申请提供一种缓存方法及装置,用以解决现有技术中针对海量客户端请求到达服务器,导致服务器处理效率低的技术问题。
[0006]—方面,本申请实施例提供的一种缓存方法,包括:
[0007]选取线程队列中的一个未执行的线程,从缓存池中获取所述线程需要的服务;
[0008]如果无法从所述缓存池中获取所述线程需要的服务,则将所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选取线程队列中的一个未执行的线程的步骤。
[0009]本申请实施例提供的方法,首先从线程队列中选取一个未执行的线程,然后通过该线程从缓存池中获取该线程需要的服务,如果获取失败,则将该线程设置为前置线程,前置线程可以去服务器中请求需要的服务,在该线程从服务器中获取到需要的服务之后,将该服务更新至缓存池,然后从线程队列中选取下一个未执行的线程,由于缓存池中已经存有相应的服务,因而线程可以直接从缓存池中获取到相应的服务,从而使得海量的请求都可以从缓存池中获取到相应的服务,提高了系统效率,减轻了服务器的负担。
[0010]可选地,从缓存池中获取所述线程需要的服务之前,还包括:
[0011 ]选取线程队列中的第一个线程,所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选取线程队列中的一个未执行的线程的步骤。
[0012]可选地,所述将所述线程设置为前置线程,包括:
[0013]若确定计数器KEY对应的状态为空闲,则将所述计数器KEY对应的状态设置为占用,所述计数器KEY用于指示是否已经有线程被设置为前置线程;
[0014]获取所述线程的类型标识,将所述线程的类型标识对应的类型修改为前置线程。
[0015]可选地,将所述服务更新至所述缓存池之后,还包括:
[0016]将数据缓存KEY对应的状态修改为已更新;
[0017]获取所述线程的类型标识,将所述线程的类型标识对应的类型修改为普通线程;
[0018]将所述计数器KEY对应的状态修改为空闲。
[0019]可选地,该方法还包括:
[0020]若确定所述缓存池中有对应的服务失效时间小于或等于预先设定的值的服务,则判断所述计数器KEY对应的状态是否为占用;
[0021 ]若所述计数器KEY对应的状态为占用,则通过执行当前的前置线程将确定的服务在所述服务器中的最新版本更新至所述缓存池;
[0022]若所述计数器KEY对应的状态为空闲,则将所述线程队列第一个线程设置为前置线程,并通过执行该前置线程将确定的服务在所述服务器中的最新版本更新至所述缓存池。
[0023]可选地,选取线程队列中的一个未执行的线程,从缓存池中获取所述线程需要的服务之前,还包括:
[0024]将所述线程队列中的线程分配到与线程需要的服务的类型对应的服务缓存线程池中;
[0025]针对每一个服务缓存线程池,选取所述服务缓存线程池中的一个线程,从所述缓存池中获取所述线程需要的服务;
[0026]如果无法从所述缓存池中获取所述线程需要的服务,则将所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选选取所述服务缓存线程池中的一个线程的步骤。
[0027]另一方面,本申请实施例提供的一种缓存装置,包括:
[0028]第一获取单元,用于选取线程队列中的一个未执行的线程,从缓存池中获取所述线程需要的服务;
[0029]第二获取单元,用于如果无法从所述缓存池中获取所述线程需要的服务,则将所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选取线程队列中的一个未执行的线程的步骤。
[0030]可选地,所述第二获取单元,还用于:
[0031 ]选取线程队列中的第一个线程,所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选取线程队列中的一个未执行的线程的步骤。
[0032]可选地,所述第二获取单元,还用于:
[0033]若确定计数器KEY对应的状态为空闲,则将所述计数器KEY对应的状态设置为占用,所述计数器KEY用于指示是否已经有线程被设置为前置线程;
[0034]获取所述线程的类型标识,将所述线程的类型标识对应的类型修改为前置线程。
[0035]可选地,所述第二获取单元,还用于:
[0036]将数据缓存KEY对应的状态修改为已更新;
[0037]获取所述线程的类型标识,将所述线程的类型标识对应的类型修改为普通线程;
[0038]将所述计数器KEY对应的状态修改为空闲。
[0039]可选地,所述装置还包括更新单元,具体用于:
[0040]若确定所述缓存池中有对应的服务失效时间小于或等于预先设定的值的服务,则判断所述计数器KEY对应的状态是否为占用;
[0041 ]若所述计数器KEY对应的状态为占用,则通过执行当前的前置线程将确定的服务在所述服务器中的最新版本更新至所述缓存池;
[0042]若所述计数器KEY对应的状态为空闲,则将所述线程队列第一个线程设置为前置线程,并通过执行该前置线程将确定的服务在所述服务器中的最新版本更新至所述缓存池。
[0043]可选地,所述第二获取单元,还用于:
[0044]将所述线程队列中的线程分配到与线程需要的服务的类型对应的服务缓存线程池中;
[0045]针对每一个服务缓存线程池,选取所述服务缓存线程池中的一个线程,从所述缓存池中获取所述线程需要的服务;
[0046]如果无法从所述缓存池中获取所述线程需要的服务,则将所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选选取所述服务缓存线程池中的一个线程的步骤。
【附图说明】
[0047]为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通请求技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0048]图1为本申请实施例提供的缓存方法流程图;
[0049]图2为本申请实施例提供的线程并发请求服务示意图;
[0050]图3为
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1