CN105447092A - 一种缓存方法及装置 - Google Patents
一种缓存方法及装置 Download PDFInfo
- Publication number
- CN105447092A CN105447092A CN201510754054.1A CN201510754054A CN105447092A CN 105447092 A CN105447092 A CN 105447092A CN 201510754054 A CN201510754054 A CN 201510754054A CN 105447092 A CN105447092 A CN 105447092A
- Authority
- CN
- China
- Prior art keywords
- thread
- service
- preposition
- pool
- cache
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
- G06F16/9574—Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及数据缓存技术领域,尤其涉及一种缓存方法及装置,用以解决现有技术中针对海量客户端请求到达服务器,导致服务器处理效率低的技术问题,包括:首先从线程队列中选取一个未执行的线程,然后通过该线程从缓存池中获取该线程需要的服务,如果获取失败,则将该线程设置为前置线程,前置线程可以去服务器中请求需要的服务,在该线程从服务器中获取到需要的服务之后,将该服务更新至缓存池,然后从线程队列中选取下一个未执行的线程,由于缓存池中已经存有相应的服务,因而线程可以直接从缓存池中获取到相应的服务,从而使得海量的请求都可以从缓存池中获取到相应的服务,提高了系统效率,减轻了服务器的负担。
Description
技术领域
本申请涉及数据缓存技术领域,尤其涉及一种缓存方法及装置。
背景技术
随着互联网技术的发展,越来越多的用户通过客户端发起请求向服务器请求某种服务或者查找数据。例如,通过手机上的客户端查询话费,使用手机上的应用程序购物等等。
现有技术中,当客户端需要向服务器请求服务时,首先会建立服务器与客户端的连接关系,在连接关系建立之后,客户端通过建立的连接向服务器请求需要的服务,在获取需要的服务之后,则释放连接。
上述现有技术主要存在以下问题:在特定的情形,如电商秒杀,有海量客户端的请求到达服务器并且请求的服务类型都类似,如请求查询商品价格,针对该情形下,由于每次都需要建立客户端与服务器的连接,然后提供向客户端提供服务,在客户端获取需要的服务之后,则释放连接,因而非常浪费资源,且无法满足瞬时海量请求,效率低下。
发明内容
本申请提供一种缓存方法及装置,用以解决现有技术中针对海量客户端请求到达服务器,导致服务器处理效率低的技术问题。
一方面,本申请实施例提供的一种缓存方法,包括:
选取线程队列中的一个未执行的线程,从缓存池中获取所述线程需要的服务;
如果无法从所述缓存池中获取所述线程需要的服务,则将所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选取线程队列中的一个未执行的线程的步骤。
本申请实施例提供的方法,首先从线程队列中选取一个未执行的线程,然后通过该线程从缓存池中获取该线程需要的服务,如果获取失败,则将该线程设置为前置线程,前置线程可以去服务器中请求需要的服务,在该线程从服务器中获取到需要的服务之后,将该服务更新至缓存池,然后从线程队列中选取下一个未执行的线程,由于缓存池中已经存有相应的服务,因而线程可以直接从缓存池中获取到相应的服务,从而使得海量的请求都可以从缓存池中获取到相应的服务,提高了系统效率,减轻了服务器的负担。
可选地,从缓存池中获取所述线程需要的服务之前,还包括:
选取线程队列中的第一个线程,所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选取线程队列中的一个未执行的线程的步骤。
可选地,所述将所述线程设置为前置线程,包括:
若确定计数器KEY对应的状态为空闲,则将所述计数器KEY对应的状态设置为占用,所述计数器KEY用于指示是否已经有线程被设置为前置线程;
获取所述线程的类型标识,将所述线程的类型标识对应的类型修改为前置线程。
可选地,将所述服务更新至所述缓存池之后,还包括:
将数据缓存KEY对应的状态修改为已更新;
获取所述线程的类型标识,将所述线程的类型标识对应的类型修改为普通线程;
将所述计数器KEY对应的状态修改为空闲。
可选地,该方法还包括:
若确定所述缓存池中有对应的服务失效时间小于或等于预先设定的值的服务,则判断所述计数器KEY对应的状态是否为占用;
若所述计数器KEY对应的状态为占用,则通过执行当前的前置线程将确定的服务在所述服务器中的最新版本更新至所述缓存池;
若所述计数器KEY对应的状态为空闲,则将所述线程队列第一个线程设置为前置线程,并通过执行该前置线程将确定的服务在所述服务器中的最新版本更新至所述缓存池。
可选地,选取线程队列中的一个未执行的线程,从缓存池中获取所述线程需要的服务之前,还包括:
将所述线程队列中的线程分配到与线程需要的服务的类型对应的服务缓存线程池中;
针对每一个服务缓存线程池,选取所述服务缓存线程池中的一个线程,从所述缓存池中获取所述线程需要的服务;
如果无法从所述缓存池中获取所述线程需要的服务,则将所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选选取所述服务缓存线程池中的一个线程的步骤。
另一方面,本申请实施例提供的一种缓存装置,包括:
第一获取单元,用于选取线程队列中的一个未执行的线程,从缓存池中获取所述线程需要的服务;
第二获取单元,用于如果无法从所述缓存池中获取所述线程需要的服务,则将所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选取线程队列中的一个未执行的线程的步骤。
可选地,所述第二获取单元,还用于:
选取线程队列中的第一个线程,所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选取线程队列中的一个未执行的线程的步骤。
可选地,所述第二获取单元,还用于:
若确定计数器KEY对应的状态为空闲,则将所述计数器KEY对应的状态设置为占用,所述计数器KEY用于指示是否已经有线程被设置为前置线程;
获取所述线程的类型标识,将所述线程的类型标识对应的类型修改为前置线程。
可选地,所述第二获取单元,还用于:
将数据缓存KEY对应的状态修改为已更新;
获取所述线程的类型标识,将所述线程的类型标识对应的类型修改为普通线程;
将所述计数器KEY对应的状态修改为空闲。
可选地,所述装置还包括更新单元,具体用于:
若确定所述缓存池中有对应的服务失效时间小于或等于预先设定的值的服务,则判断所述计数器KEY对应的状态是否为占用;
若所述计数器KEY对应的状态为占用,则通过执行当前的前置线程将确定的服务在所述服务器中的最新版本更新至所述缓存池;
若所述计数器KEY对应的状态为空闲,则将所述线程队列第一个线程设置为前置线程,并通过执行该前置线程将确定的服务在所述服务器中的最新版本更新至所述缓存池。
可选地,所述第二获取单元,还用于:
将所述线程队列中的线程分配到与线程需要的服务的类型对应的服务缓存线程池中;
针对每一个服务缓存线程池,选取所述服务缓存线程池中的一个线程,从所述缓存池中获取所述线程需要的服务;
如果无法从所述缓存池中获取所述线程需要的服务,则将所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选选取所述服务缓存线程池中的一个线程的步骤。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通请求技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的缓存方法流程图;
图2为本申请实施例提供的线程并发请求服务示意图;
图3为本申请实施例提供的线程并发请求服务示意图;
图4为本申请实施例提供的缓存方法详细流程图;
图5为本申请实施例提供的缓存装置示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请一部份实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通请求技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
下面结合说明书附图对本申请实施例作进一步详细描述。
如图1所示,本申请实施例提供的缓存方法,包括:
步骤101、选取线程队列中的一个未执行的线程,从缓存池中获取线程需要的服务;
步骤102、如果无法从缓存池中获取线程需要的服务,则将线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将服务更新至缓存池。
线程队列中存储的线程对应的是客户端向服务器请求的服务或者数据,客户端请求的服务或者数据可以是不同的类型,也可以是相同的类型,优选的,客户端向服务器请求的是相同类型的服务,请求的每个服务是通过调用一个线程来执行的,例如,在电商秒杀中,客户端向服务器请求海量的服务,该服务可以是价格查询,商品筛选等,每个服务可以调用一个线程来执行,请求的海量服务对应海量的线程,海量的线程是在一个线程队列中存储的,然后按照从队头到队尾的顺序,逐个执行队列中的线程,通过每个线程去缓存中请求服务。其中,缓存中的服务是从服务器更新过来的,客户端在使用缓存池中的服务时无需再去建立连接以及最后释放连接,而是直接可以使用缓存池中的服务,因而利用将服务器中的服务缓存至缓存池,然后让客户端从缓存池中获取相应的服务,可以高效地为客户端提供服务。
本申请实施例提供的方法,首先从线程队列中选取一个未执行的线程,然后通过该线程从缓存池中获取该线程需要的服务,如果获取失败,则将该线程设置为前置线程,其中,前置线程可以去服务器中请求需要的服务,而线程队列中的其它线程则需要等待前置线程执行完之后才可以执行的,当前置线程从服务器中获取到需要的服务之后,将该服务更新至缓存池,然后从线程队列中选取下一个未执行的线程,由于缓存池中已经存有相应的服务,因而线程可以直接从缓存池中获取到相应的服务,从而使得海量同类型的请求都可以从缓存池中获取到相应的服务,提高了系统效率,减轻了服务器的负担。
可选地,在步骤101之前,还包括:选取线程队列中的第一个线程,所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选取线程队列中的一个未执行的线程的步骤。
上述方法,当选取的是线程队列中的第一线程时,此时缓存池是肯定没有服务的,因而直接将该线程设置为前置线程,并且该前置线程从服务器中请求需要的服务,并将所述服务更新至所述缓存池,因而该方法,当请求服务的线程是第一队列中的第一个线程时,直接去服务器获取相应的服务并更新至缓存池,因而节约了时间,提高了系统效率。
具体地,当一个线程无法从缓存池中获取到需要的服务时,则可以通过该线程从服务器中获取相应的服务,并在获取成功后将获取到的服务更新至缓存池,在一个线程正在服务器中获取服务的同时,线程队列中的线程可以是也被调用,先去缓存池中获取需要的服务,如果没有获取到,则去服务器中获取需要的服务,并在获取成功后将获取到的服务更新至缓存池,优选地,在针对大量请求的服务是同一类型的情况下,则设定只能有一个线程可以去服务器中获取相应的服务,该线程被设置为前置线程,只有前置线程可以去服务器中获取相应的服务并将服务更新至缓存池,而线程队列中的线程只能等到前置线程将服务更新至缓存池之后,从缓存池获取需要的服务,由于队列中的线程请求的服务是同一类型的,因此多数情况下,可以从缓存池中获取到需要的服务,因而大量节约了时间,提高了效率。
可选地,所述将所述线程设置为前置线程,包括:
若确定计数器KEY对应的状态为空闲,则将所述计数器KEY对应的状态设置为占用,所述计数器KEY用于指示是否已经有线程被设置为前置线程;
获取所述线程的类型标识,将所述线程的类型标识对应的类型修改为前置线程。
上述方法,通过一个全局变量计数器KEY来控制只有一个线程被设置为前置线程,例如,线程100需要去服务器请求服务,首先确定计数器KEY对应的当前状态为空间,则表明当前没有线程被设置为前置线程,则线程100可以请求被设置为前置线程,此时将计数器KEY对应的状态设置为占用,因此,其它的线程就无法在被设置为前置线程了。在将计数器KEY对应的状态设置为占用之后,获取线程100的类型标识,将线程100的类型标识对应的类型修改为前置线程,即将线程100的类型属性修改为前置线程。通过该方法,可保证线程队列中的线程同一个时刻只有一个线程被设置为前置线程去服务器获取服务,因而避免了有多个请求相同服务的线程同时去服务器请求服务而造成资源的浪费和请求的阻塞,因而可以提高系统效率。
可选地,将所述服务更新至所述缓存池之后,还包括:
将数据缓存KEY对应的状态修改为已更新;
获取所述线程的类型标识,将所述线程的类型标识对应的类型修改为普通线程;
将所述计数器KEY对应的状态修改为空闲。
上述方法,在前置线程将需要的服务更新至缓存池之后,则前置线程的任务已经完成,因此首先将数据缓存KEY对应的状态修改为已更新,数据缓存KEY用于指示当前前置线程是否已经将服务器的服务更新至缓存池,线程队列中的线程在去缓存池获取需要的服务之前首先判断数据缓存KEY对应的状态是否为已更新,若是,表示前置线程更新完毕,此时线程队列中的线程可以去缓存池获取需要的服务;然后获取线程的类型标识,将线程的类型标识对应的类型修改为普通线程,即将该前置线程设置普通线程;然后将计数器KEY对应的状态修改为空闲,以使线程队列中的其它线程在从缓存池获取不到需要的服务时,可以被设置为前置线程去服务器中获取需要的服务。该方法,通过数据缓存KEY可以让线程队列中的线程等待前置线程将服务更新至缓存池之后,再去缓存池查看是否有需要的服务,由于本申请实施例中客户端请求的服务类型有很多是相同的,例如订单查询服务,话费查询服务,积分查询服务等,因而当前置线程将服务更新至缓存池之后,缓存队列中的线程有很大的概率可以从缓存池中获取需要的服务,另外,通过计数器KEY可以控制每次只有一个线程被设置为前置线程,然后去服务器请求服务,因而该方法可以减少向服务器请求服务的次数,提高了系统效率。
具体地,由于服务器中的服务会有更新,因此也需要对缓存池中的服务进行同步更新,例如可以是服务器每隔一段时间对缓存池内的服务进行更新,当然也还可以是其它方法来更新缓存池内的服务,比如可以对缓存池内的服务设置一个失效时间,当服务快要失效时来请求更新。
可选地,该方法还包括:
若确定所述缓存池中有对应的服务失效时间小于或等于预先设定的值的服务,则判断所述计数器KEY对应的状态是否为占用;
若所述计数器KEY对应的状态为占用,则通过执行当前的前置线程将确定的服务在所述服务器中的最新版本更新至所述缓存池;
若所述计数器KEY对应的状态为空闲,则将所述线程队列第一个线程设置为前置线程,并通过执行该前置线程将确定的服务在所述服务器中的最新版本更新至所述缓存池。
上述方法,前置线程在将服务器的服务更新至缓存池之后,给该服务设置一个服务失效时间,例如5S,10S等等,然后给服务失效时间进行倒计时。当检测到缓存池中有对应的服务失效时间小于或等于预先设定的值的服务时,例如预先设定的值可以是1S或者0.5S等,当服务失效时间已经到达预先设定的值,表明该服务快要失效了,因而此时需要对该服务进行更新。首先判断计数器KEY对应的状态是空闲还是占用,若是占用,表明当前有前置线程在做其它服务的更新,则可以使用该前置线程对即将失效的服务进行更新,若是空闲,则表明当前没有前置线程,则将线程队列第一个线程设置为前置线程,并通过执行该前置线程将确定的服务在服务器中的最新版本更新至缓存池。因此该方法通过对缓存池的服务设置服务失效时间,因而可以保证在缓存池的服务即将失效时,可以进行自动更新,将服务器中的该服务的最新版本更新至缓存池,保证客户端请求到的服务是最新版本。
另外,由于线程队列中的线程所需要的请求的服务可以是相同的,也可以是不同的,针对线程队列中请求不同服务的情形,可以通过设置多个服务缓存线程池来实现并发请求服务,从而提高系统效率。
可选地,选取线程队列中的一个未执行的线程,从缓存池中获取所述线程需要的服务之前,还包括:
将所述线程队列中的线程分配到与线程需要的服务的类型对应的服务缓存线程池中;
针对每一个服务缓存线程池,选取所述服务缓存线程池中的一个线程,从所述缓存池中获取所述线程需要的服务;
如果无法从所述缓存池中获取所述线程需要的服务,则将所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选选取所述服务缓存线程池中的一个线程的步骤。
上述方法,根据线程队列中线程请求的服务类型,设置有多个服务缓存线程池,每个服务缓存线程池对应一种服务的请求线程,例如有4个服务缓存线程池分别为话费查询服务缓存线程池A,积分查询服务缓存线程池B,电子券查询服务缓存线程池C,账单查询服务缓存线程池D,如图2所示,为本申请实施例提供的线程并发请求服务示意图。对于线程队列中的每个线程,则可以分别转发至对应的服务缓存线程池,例如线程队列中的需要请求话费查询服务的线程,则转发至话费查询服务缓存线程池A,线程队列中的需要请求积分查询服务的线程,则转发至积分查询服务缓存线程池B,线程队列中的需要请求电子券查询服务的线程,则转发至电子券查询服务缓存线程池C,线程队列中的需要请求账单查询服务的线程,则转发至账单查询服务缓存线程池D。其中,对于转发的方式在实际应用中可以根据需要而定,例如本申请实施例以API(ApplicationProgrammingInterface,应用程序编程接口)Facet微服务接口进行转发为例进行说明,所有来自分布式客户端的请求线程都要先经过APIFacet微服务接口,然后路由这些请求线程到对应的服务缓存线程池中,然后对于每一个服务缓存线程池,都设置成每次只有一个前置线程可以去服务器请求服务,并更新至服务缓存线程池,以便该服务缓存线程池中的其它线程可以从缓存池中获取到相应的服务。该方法通过设置多个服务缓存线程池提供不同的服务,并且多个服务缓存线程池之间可以并发执行,从而实现并发执行多个服务请求,提高了处理的效率。
另外,本申请实施例还可以提供另外一种并发方式,如图3所示,为本申请实施例提供的线程并发请求服务示意图。针对每一个服务缓存线程池,都对应一个服务缓存池,因此话费查询服务缓存池线程A中的线程可以到话费查询缓存池A中去请求相应的服务,如果没有,则通过前置线程到服务器中请求服务并更新至话费查询缓存池A;积分查询服务缓存池线程B中的线程可以到积分查询缓存池B中去请求相应的服务,如果没有,则通过前置线程到服务器中请求服务并更新至积分查询缓存池B;电子券查询服务缓存池线程C中的线程可以到电子券查询缓存池A中去请求相应的服务,如果没有,则通过前置线程到服务器中请求服务并更新至电子券查询缓存池C;账单查询服务缓存池线程D中的线程可以到账单查询缓存池D中去请求相应的服务,如果没有,则通过前置线程到服务器中请求服务并更新至账单查询缓存池D。因而通过为每个服务缓存线程池设置一个缓存池,可以更有针对性缓存相应的服务,提高了系统的处理速度。
下面对本申请实施例提供的缓存方法做详细描述。如图4所示,为本申请实施例提供的缓存方法详细流程图,其中,以图2中的缓存方式为例进行说明。
步骤401、获取线程队列中的一个线程,通过APIFacet微服务接口转发至对应的服务缓存线程池;
步骤402、针对每个服务缓存线程池中的一个线程,从缓存池中获取需要的服务;
步骤403、若从缓存池中获取需要的服务失败,则将该线程设置为前置线程;
步骤404、调用前置线程到服务器获取需要的服务,并将该服务更新至缓存池。
基于相同的技术构思,本申请实施例还提供一种缓存装置。本申请实施例提供的缓存装置如图5所示。
第一获取单元501,用于选取线程队列中的一个未执行的线程,从缓存池中获取所述线程需要的服务;
第二获取单元502,用于如果无法从所述缓存池中获取所述线程需要的服务,则将所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选取线程队列中的一个未执行的线程的步骤。
可选地,所述第二获取单元502,还用于:
选取线程队列中的第一个线程,所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选取线程队列中的一个未执行的线程的步骤。
可选地,所述第二获取单元502,还用于:
若确定计数器KEY对应的状态为空闲,则将所述计数器KEY对应的状态设置为占用,所述计数器KEY用于指示是否已经有线程被设置为前置线程;
获取所述线程的类型标识,将所述线程的类型标识对应的类型修改为前置线程。
可选地,所述第二获取单元502,还用于:
将数据缓存KEY对应的状态修改为已更新;
获取所述线程的类型标识,将所述线程的类型标识对应的类型修改为普通线程;
将所述计数器KEY对应的状态修改为空闲。
可选地,所述装置还包括更新单元503,具体用于:
若确定所述缓存池中有对应的服务失效时间小于或等于预先设定的值的服务,则判断所述计数器KEY对应的状态是否为占用;
若所述计数器KEY对应的状态为占用,则通过执行当前的前置线程将确定的服务在所述服务器中的最新版本更新至所述缓存池;
若所述计数器KEY对应的状态为空闲,则将所述线程队列第一个线程设置为前置线程,并通过执行该前置线程将确定的服务在所述服务器中的最新版本更新至所述缓存池。
可选地,所述第二获取单元502,还用于:
将所述线程队列中的线程分配到与线程需要的服务的类型对应的服务缓存线程池中;
针对每一个服务缓存线程池,选取所述服务缓存线程池中的一个线程,从所述缓存池中获取所述线程需要的服务;
如果无法从所述缓存池中获取所述线程需要的服务,则将所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选选取所述服务缓存线程池中的一个线程的步骤。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (12)
1.一种缓存方法,其特征在于,包括:
选取线程队列中的一个未执行的线程,从缓存池中获取所述线程需要的服务;
如果无法从所述缓存池中获取所述线程需要的服务,则将所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选取线程队列中的一个未执行的线程的步骤。
2.如权利要求1所述的方法,其特征在于,从缓存池中获取所述线程需要的服务之前,还包括:
选取线程队列中的第一个线程,所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选取线程队列中的一个未执行的线程的步骤。
3.如权利要求1所述的方法,其特征在于,所述将所述线程设置为前置线程,包括:
若确定计数器KEY对应的状态为空闲,则将所述计数器KEY对应的状态设置为占用,所述计数器KEY用于指示是否已经有线程被设置为前置线程;
获取所述线程的类型标识,将所述线程的类型标识对应的类型修改为前置线程。
4.如权利要求3所述的方法,其特征在于,将所述服务更新至所述缓存池之后,还包括:
将数据缓存KEY对应的状态修改为已更新;
获取所述线程的类型标识,将所述线程的类型标识对应的类型修改为普通线程;
将所述计数器KEY对应的状态修改为空闲。
5.如权利要求3所述的方法,其特征在于,该方法还包括:
若确定所述缓存池中有对应的服务失效时间小于或等于预先设定的值的服务,则判断所述计数器KEY对应的状态是否为占用;
若所述计数器KEY对应的状态为占用,则通过执行当前的前置线程将确定的服务在所述服务器中的最新版本更新至所述缓存池;
若所述计数器KEY对应的状态为空闲,则将所述线程队列第一个线程设置为前置线程,并通过执行该前置线程将确定的服务在所述服务器中的最新版本更新至所述缓存池。
6.如权利要求1所述的方法,其特征在于,选取线程队列中的一个未执行的线程,从缓存池中获取所述线程需要的服务之前,还包括:
将所述线程队列中的线程分配到与线程需要的服务的类型对应的服务缓存线程池中;
针对每一个服务缓存线程池,选取所述服务缓存线程池中的一个线程,从所述缓存池中获取所述线程需要的服务;
如果无法从所述缓存池中获取所述线程需要的服务,则将所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选选取所述服务缓存线程池中的一个线程的步骤。
7.一种缓存装置,其特征在于,包括:
第一获取单元,用于选取线程队列中的一个未执行的线程,从缓存池中获取所述线程需要的服务;
第二获取单元,用于如果无法从所述缓存池中获取所述线程需要的服务,则将所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选取线程队列中的一个未执行的线程的步骤。
8.如权利要求7所述的装置,其特征在于,所述第二获取单元,还用于:
选取线程队列中的第一个线程,所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选取线程队列中的一个未执行的线程的步骤。
9.如权利要求7所述的装置,其特征在于,所述第二获取单元,还用于:
若确定计数器KEY对应的状态为空闲,则将所述计数器KEY对应的状态设置为占用,所述计数器KEY用于指示是否已经有线程被设置为前置线程;
获取所述线程的类型标识,将所述线程的类型标识对应的类型修改为前置线程。
10.如权利要求9所述的装置,其特征在于,所述第二获取单元,还用于:
将数据缓存KEY对应的状态修改为已更新;
获取所述线程的类型标识,将所述线程的类型标识对应的类型修改为普通线程;
将所述计数器KEY对应的状态修改为空闲。
11.如权利要求9所述的装置,其特征在于,所述装置还包括更新单元,具体用于:
若确定所述缓存池中有对应的服务失效时间小于或等于预先设定的值的服务,则判断所述计数器KEY对应的状态是否为占用;
若所述计数器KEY对应的状态为占用,则通过执行当前的前置线程将确定的服务在所述服务器中的最新版本更新至所述缓存池;
若所述计数器KEY对应的状态为空闲,则将所述线程队列第一个线程设置为前置线程,并通过执行该前置线程将确定的服务在所述服务器中的最新版本更新至所述缓存池。
12.如权利要求7所述的装置,其特征在于,所述第二获取单元,还用于:
将所述线程队列中的线程分配到与线程需要的服务的类型对应的服务缓存线程池中;
针对每一个服务缓存线程池,选取所述服务缓存线程池中的一个线程,从所述缓存池中获取所述线程需要的服务;
如果无法从所述缓存池中获取所述线程需要的服务,则将所述线程设置为前置线程,通过执行所述前置线程从所述服务器中请求需要的服务,并将所述服务更新至所述缓存池,并返回选选取所述服务缓存线程池中的一个线程的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510754054.1A CN105447092A (zh) | 2015-11-09 | 2015-11-09 | 一种缓存方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510754054.1A CN105447092A (zh) | 2015-11-09 | 2015-11-09 | 一种缓存方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105447092A true CN105447092A (zh) | 2016-03-30 |
Family
ID=55557270
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510754054.1A Pending CN105447092A (zh) | 2015-11-09 | 2015-11-09 | 一种缓存方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105447092A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106331100A (zh) * | 2016-08-24 | 2017-01-11 | 金蝶软件(中国)有限公司 | 待处理业务信息推送方法和装置 |
CN107451144A (zh) * | 2016-05-31 | 2017-12-08 | 北京京东尚科信息技术有限公司 | 缓存读取方法和装置 |
CN107623729A (zh) * | 2017-09-08 | 2018-01-23 | 华为技术有限公司 | 一种缓存方法、设备及缓存服务系统 |
CN108694075A (zh) * | 2017-04-12 | 2018-10-23 | 北京京东尚科信息技术有限公司 | 处理报表数据的方法、装置、电子设备和可读存储介质 |
CN109542629A (zh) * | 2018-12-26 | 2019-03-29 | 苏州乐麟无线信息科技有限公司 | 一种基于分布式系统的数据的处理方法及装置 |
CN111104168A (zh) * | 2018-10-25 | 2020-05-05 | 杭州嘉楠耘智信息科技有限公司 | 一种计算结果提交方法及装置 |
CN112055039A (zh) * | 2019-06-06 | 2020-12-08 | 阿里巴巴集团控股有限公司 | 数据访问方法、装置、系统及计算设备 |
CN112799803A (zh) * | 2021-01-14 | 2021-05-14 | 深圳市瞬点科技有限公司 | 微服务架构运行维护方法、装置、设备及可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102088485A (zh) * | 2010-12-30 | 2011-06-08 | 用友软件股份有限公司 | 数据获取方法和装置 |
CN103399856A (zh) * | 2013-07-01 | 2013-11-20 | 北京科东电力控制系统有限责任公司 | 面向scada系统的爆发式数据缓存处理系统及其方法 |
CN103645959A (zh) * | 2013-12-18 | 2014-03-19 | 北京直真科技股份有限公司 | 电信实时系统多进程共享内存池交互组件和方法 |
-
2015
- 2015-11-09 CN CN201510754054.1A patent/CN105447092A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102088485A (zh) * | 2010-12-30 | 2011-06-08 | 用友软件股份有限公司 | 数据获取方法和装置 |
CN103399856A (zh) * | 2013-07-01 | 2013-11-20 | 北京科东电力控制系统有限责任公司 | 面向scada系统的爆发式数据缓存处理系统及其方法 |
CN103645959A (zh) * | 2013-12-18 | 2014-03-19 | 北京直真科技股份有限公司 | 电信实时系统多进程共享内存池交互组件和方法 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107451144A (zh) * | 2016-05-31 | 2017-12-08 | 北京京东尚科信息技术有限公司 | 缓存读取方法和装置 |
CN107451144B (zh) * | 2016-05-31 | 2019-12-31 | 北京京东尚科信息技术有限公司 | 缓存读取方法和装置 |
CN106331100A (zh) * | 2016-08-24 | 2017-01-11 | 金蝶软件(中国)有限公司 | 待处理业务信息推送方法和装置 |
CN108694075A (zh) * | 2017-04-12 | 2018-10-23 | 北京京东尚科信息技术有限公司 | 处理报表数据的方法、装置、电子设备和可读存储介质 |
CN108694075B (zh) * | 2017-04-12 | 2021-03-30 | 北京京东尚科信息技术有限公司 | 处理报表数据的方法、装置、电子设备和可读存储介质 |
CN107623729A (zh) * | 2017-09-08 | 2018-01-23 | 华为技术有限公司 | 一种缓存方法、设备及缓存服务系统 |
CN107623729B (zh) * | 2017-09-08 | 2021-01-15 | 华为技术有限公司 | 一种缓存方法、设备及缓存服务系统 |
CN111104168A (zh) * | 2018-10-25 | 2020-05-05 | 杭州嘉楠耘智信息科技有限公司 | 一种计算结果提交方法及装置 |
CN109542629A (zh) * | 2018-12-26 | 2019-03-29 | 苏州乐麟无线信息科技有限公司 | 一种基于分布式系统的数据的处理方法及装置 |
CN112055039A (zh) * | 2019-06-06 | 2020-12-08 | 阿里巴巴集团控股有限公司 | 数据访问方法、装置、系统及计算设备 |
CN112799803A (zh) * | 2021-01-14 | 2021-05-14 | 深圳市瞬点科技有限公司 | 微服务架构运行维护方法、装置、设备及可读存储介质 |
CN112799803B (zh) * | 2021-01-14 | 2023-11-17 | 深圳市瞬点科技有限公司 | 微服务架构运行维护方法、装置、设备及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105447092A (zh) | 一种缓存方法及装置 | |
CN108052675B (zh) | 日志管理方法、系统及计算机可读存储介质 | |
CN109862065B (zh) | 文件下载方法、装置和电子设备 | |
CN108737270B (zh) | 一种服务器集群的资源管理方法和装置 | |
CN108595207B (zh) | 一种灰度发布方法、规则引擎、系统、终端和存储介质 | |
US10069943B2 (en) | Query dispatch and execution architecture | |
CN108924250B (zh) | 基于区块链的业务请求处理方法、装置和计算机设备 | |
CN110908788B (zh) | 基于Spark Streaming的数据处理方法、装置、计算机设备及存储介质 | |
US20170185452A1 (en) | Apparatus and method for data processing | |
US20170047069A1 (en) | Voice processing method and device | |
CN106649640B (zh) | 一种即时搜索方法及装置 | |
US11314545B2 (en) | Predicting transaction outcome based on artifacts in a transaction processing environment | |
CN109471896A (zh) | 数据源信息动态变更方法及装置 | |
CN105516086B (zh) | 业务处理方法及装置 | |
CN109840262B (zh) | 数据统计方法及相关装置 | |
CN104714835A (zh) | 一种数据访问处理方法及装置 | |
CN103207785A (zh) | 数据下载请求的处理方法、装置及系统 | |
CN111818117A (zh) | 数据更新的方法、装置、存储介质及电子设备 | |
CN112463290A (zh) | 动态调整计算容器的数量的方法、系统、装置和存储介质 | |
CN109241099A (zh) | 一种数据查询方法及终端设备 | |
CN102789394A (zh) | 一种并行处理消息的方法、装置、节点及服务器集群 | |
CN105260244A (zh) | 一种分布式系统任务调度的方法和装置 | |
CN108958933B (zh) | 任务执行器的配置参数更新方法、装置及设备 | |
WO2018068655A1 (zh) | 一种许可管理方法和系统 | |
CN108833147B (zh) | 一种配置信息的更新方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160330 |