线程池内任务共享主线程多级缓存方法、系统及设备与流程

文档序号:27081272发布日期:2021-10-24 12:41阅读:80来源:国知局
1.本发明涉及计算机开发应用
技术领域
:,特别是涉及一种线程池内任务共享主线程多级缓存方法、系统及设备。
背景技术
::2.在开发应用系统中,为了更加快速地响应请求,提高系统的qps,我们会使用很多的手段,比如说异步、缓存。而在一次请求又有异步的情况下,缓存往往需要借助缓存中间件来实现,但查询缓存中间件也是一次网络调用,而如果要使用本地缓存的话,需要同时维护本地缓存和缓存中间件数据的一致性,多机高qps的情况下这个维护成本更高,效果会更差,编码难度不言而喻。3.综上所述,现有技术中存在的主要问题是:在一次请求内,异步任务不能共享主线程任务的数据,造成重复的网络调用,系统处理能力变低。因此,亟需一种能够实现线程池内的任务可以共享主线程缓存,从而使得子线程的处理速度更快,减少数据库和缓存中间件的压力的方法。技术实现要素:4.基于此,本发明的目的在于,提供一种能够实现线程池内的任务可以共享主线程缓存,从而使得子线程的处理速度更快,减少数据库和缓存中间件的压力的线程池内任务共享主线程多级缓存方法、系统及设备。5.第一方面,本发明的线程池内任务共享主线程多级缓存方法,包括:设置多级缓存查询方法;定义线程池,设置线程池内执行任务的方法;启动主线程,按照多级缓存查询方法将数据缓存到缓存中间件和本地;在主线程创建子任务,并提交到定义的线程池中,执行子任务,并从本地获取数据。6.本发明的线程池内任务共享主线程多级缓存方法通过设置多级缓存查询方法,定义线程池,设置线程池内执行任务的方法,启动主线程,按照多级缓存查询方法将数据缓存到缓存中间件和本地,在主线程创建子任务,并提交到定义的线程池中,执行子任务,并从本地获取数据,实现线程池内的任务可以共享主线程缓存,从而使得子线程的处理速度更快,减少数据库和缓存中间件的压力,解决了现有技术中在一次请求内,异步任务不能共享主线程任务的数据,造成重复的网络调用,系统处理能力变低的技术问题。7.上述技术方案在一种实施方式中,所述设置多级缓存查询方法,包括:设置查询本地缓存为第一级查询,设置查询缓存中间件为第二级查询,设置查询数据库为第三级查询;设置首先执行第一级查询,若第一级查询命中,则查询终止;若第一级查询未命中,则设置执行第二级查询,若第二级查询命中,则查询终止;若第二级查询仍未命中,则设置执行第三级查询;设置将第一级查询、或第二级查询、或第三级查询获取的数据依次缓存到缓存中间件和本地。8.上述技术方案在一种实施方式中,所述设置首先执行第一级查询,包括:设置首先调用ttl.get()执行第一级查询。9.上述技术方案在一种实施方式中,所述设置将第一级查询、或第二级查询、或第三级查询获取的数据依次缓存到缓存中间件和本地,包括:设置调用ttl.set()将第一级查询、或第二级查询、或第三级查询获取的数据依次缓存到缓存中间件和本地。10.上述技术方案在一种实施方式中,所述设置线程池内执行任务的方法,包括:设置对入参runnable或者callable用ttl中的ttlrunnable或者ttlcallable进行包装。11.上述技术方案在一种实施方式中,所述在主线程创建子任务,并提交到定义的线程池中,包括:在主线程创建子任务,并通过ttlrunnable或者ttlcallable对子任务包装,并提交到定义的线程池中。12.上述技术方案在一种实施方式中,所述方法还包括:命令主线程清空本地缓存。13.第二方面,本发明提供一种线程池内任务共享主线程多级缓存系统,包括:定义设置模块,用于设置多级缓存查询方法;以及用于定义线程池,设置线程池内执行任务的方法;命令执行模块,用于启动主线程,按照多级缓存查询方法将数据缓存到缓存中间件和本地;以及用于在主线程创建子任务,并提交到定义的线程池中,执行子任务,并从本地获取数据。14.第三方面,本发明提供一种设备,包括:存储器,用于存储一个或多个程序;处理器,用于运行所述存储器中存储的所述程序,以实现如上述任一项所述的线程池内任务共享主线程多级缓存方法。15.第四方面,本发明提供一种计算机可读存储介质,其存储有至少一个程序,当所述程序被处理器执行时,实现如上述任一项所述的线程池内任务共享主线程多级缓存方法。16.相对于现有技术,本发明的线程池内任务共享主线程多级缓存方法、系统及设备通过设置多级缓存查询方法,定义线程池,设置线程池内执行任务的方法,启动主线程,按照多级缓存查询方法将数据缓存到缓存中间件和本地,在主线程创建子任务,并提交到定义的线程池中,执行子任务,并从本地获取数据,实现线程池内的任务可以共享主线程缓存,从而使得子线程的处理速度更快,减少数据库和缓存中间件的压力,解决了现有技术中在一次请求内,异步任务不能共享主线程任务的数据,造成重复的网络调用,系统处理能力变低的技术问题。17.为了更好地理解和实施,下面结合附图详细说明本发明。附图说明18.图1是本发明的线程池内任务共享主线程多级缓存方法的示例性流程框图。19.图2是本发明的线程池内任务共享主线程多级缓存方法的另一示例性流程框图。20.图3设置多级缓存查询方法的示例性流程框图。21.图4设置多级缓存查询方法的另一示例性流程框图。22.图5是本发明的线程池内任务共享主线程多级缓存系统的示例性框图。23.其中,图2和图4分别为对图1和图3的详细示例。具体实施方式24.以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的方法的例子。25.在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。26.请参阅图1和图2。图1是本发明的线程池内任务共享主线程多级缓存方法的示例性流程框图。图2是本发明的线程池内任务共享主线程多级缓存方法的另一示例性流程框图。27.第一方面,本发明的线程池内任务共享主线程多级缓存方法,该方法可具体通过管理设备执行,该方法包括:步骤101,设置多级缓存查询方法。28.请进一步参阅图3和图4,在一种实施方式中,上述步骤101,所述设置多级缓存查询方法,包括:步骤1011,设置查询本地缓存为第一级查询,设置查询缓存中间件为第二级查询,设置查询数据库为第三级查询。29.可选地,所述设置首先执行第一级查询,包括:设置首先调用ttl.get()执行第一级查询。30.需要说明的是,transmittable‑thread‑local(以下简称ttl)是阿里开源的工具,它的能力就是线程池内的任务在执行之前会拷贝主线程的数据到当前子线程,在执行完之后销毁子线程的数据。因此,ttl适合应用于本发明的步骤中。31.示例性的,所述缓存中间件可以为redis。所述数据库可以是任何数据存储介质,比如redis、memcached、ehcache等。32.步骤1012,设置首先执行第一级查询,若第一级查询命中,则查询终止。33.步骤1013,若第一级查询未命中,则设置执行第二级查询,若第二级查询命中,则查询终止。34.步骤1014,若第二级查询仍未命中,则设置执行第三级查询。35.步骤1015,设置将第一级查询、或第二级查询、或第三级查询获取的数据依次缓存到缓存中间件和本地。36.可选地,上述步骤1015,所述设置将第一级查询、或第二级查询、或第三级查询获取的数据依次缓存到缓存中间件和本地,包括:设置调用ttl.set()将第一级查询、或第二级查询、或第三级查询获取的数据依次缓存到缓存中间件和本地。37.步骤102,定义线程池,设置线程池内执行任务的方法。38.可选地,所述设置线程池内执行任务的方法,包括:设置对入参runnable或者callable用ttl中的ttlrunnable或者ttlcallable进行包装。39.步骤103,启动主线程,按照多级缓存查询方法将数据缓存到缓存中间件和本地。40.步骤104,在主线程创建子任务,并提交到定义的线程池中,执行子任务,并从本地获取数据。41.可选地,所述在主线程创建子任务,并提交到定义的线程池中,包括:在主线程创建子任务,并通过ttlrunnable或者ttlcallable对子任务包装,并提交到定义的线程池中。42.子任务通过ttlrunnable或者ttlcallable包装后,执行的时候会先从主线程的本地缓存把数据拷贝到自己的本地缓存,此时,子线程在获取数据时就能直接从本地缓存读取。43.步骤105,命令主线程清空本地缓存。44.需要说明的是,主线程也是复用的,如tomcat中请求分发后的任务线程。45.需要说明的是,上述步骤101‑105并不对其时序进行限定,在具体实施时,上述步骤可能是先后、同时、或者交叉进行的,本实施例不会时序进行限定。46.请进一步参阅图5,图5是本发明的线程池内任务共享主线程多级缓存系统的示例性框图。47.第二方面,基于同一发明构思,本发明提供一种线程池内任务共享主线程多级缓存系统,包括:定义设置模块s1,用于设置多级缓存查询方法;以及用于定义线程池,设置线程池内执行任务的方法。48.命令执行模块s2,用于启动主线程,按照多级缓存查询方法将数据缓存到缓存中间件和本地;以及用于在主线程创建子任务,并提交到定义的线程池中,执行子任务,并从本地获取数据。49.在一种实施方式中,上述定义设置模块模块s1具体用于:a.设置查询本地缓存为第一级查询,设置查询缓存中间件为第二级查询,设置查询数据库为第三级查询。50.可选地,所述设置首先执行第一级查询,包括:设置首先调用ttl.get()执行第一级查询。51.需要说明的是,transmittable‑thread‑local(以下简称ttl)是阿里开源的工具,它的能力就是线程池内的任务在执行之前会拷贝主线程的数据到当前子线程,在执行完之后销毁子线程的数据。因此,ttl适合应用于本发明的步骤中。52.示例性的,所述缓存中间件可以为redis。53.b.设置首先执行第一级查询,若第一级查询命中,则查询终止。54.c.若第一级查询未命中,则设置执行第二级查询,若第二级查询命中,则查询终止。55.d.若第二级查询仍未命中,则设置执行第三级查询。56.e.设置将第一级查询、或第二级查询、或第三级查询获取的数据依次缓存到缓存中间件和本地。57.可选地,所述设置将第一级查询、或第二级查询、或第三级查询获取的数据依次缓存到缓存中间件和本地,包括:设置调用ttl.set()将第一级查询、或第二级查询、或第三级查询获取的数据依次缓存到缓存中间件和本地。58.在一些实施例中,上述定义设置模块模块s1还具体用于:设置对入参runnable或者callable用ttl中的ttlrunnable或者ttlcallable进行包装。59.在一些实施例中,上述命令执行模块s2具体用于:在主线程创建子任务,并通过ttlrunnable或者ttlcallable对子任务包装,并提交到定义的线程池中。60.子任务通过ttlrunnable或者ttlcallable包装后,执行的时候会先从主线程的本地缓存把数据拷贝到自己的本地缓存,此时,子线程在获取数据时就能直接从本地缓存读取。61.在一些实施例中,上述命令执行模块s2还具体用于:命令主线程清空本地缓存。62.需要说明的是,主线程也是复用的,如tomcat中请求分发后的任务线程。63.另外,本发明的线程池内任务共享主线程多级缓存系统与本发明的线程池内任务共享主线程多级缓存方法是基于同一构思下的发明,通过前述对本发明的线程池内任务共享主线程多级缓存方法的详细描述,本领域技术人员可以清楚地了解本实施例中线程池内任务共享主线程多级缓存系统的实施过程,所以为了说明书的简洁,在此不再赘述。64.第三方面,基于同一发明构思,本发明提供一种设备,包括:存储器,用于存储一个或多个程序;处理器,用于运行所述存储器中存储的所述程序,以实现如所述的线程池内任务共享主线程多级缓存方法。65.所述设备还可以优选地包括通信接口,所述通信接口用于与外部设备进行通信和数据交互传输。66.需要说明的是,所述存储器可能包含高速ram存储器,也可能还包括非易失性存储器(nonvolatilememory),例如至少一个磁盘存储器。67.在具体实现上,如果存储器、处理器及通信接口集成在一块芯片上,则存储器、处理器及通信接口可以通过内部接口完成相互间的通信。如果存储器、处理器和通信接口独立实现,则存储器、处理器和通信接口可以通过总线相互连接并完成相互间的通信。68.第四方面,基于同一发明构思,本发明提供一种计算机可读存储介质,其存储有至少一个程序,当所述程序被处理器执行时,实现如所述的线程池内任务共享主线程多级缓存方法。69.应当理解,所述计算机可读存储介质为可存储数据或程序的任何数据存储设备,所述数据或程序其后可由计算机系统读取。计算机可读存储介质的示例包括只读存储器、随机存取存储器、cd‑rom、hdd、dvd、磁带和光学数据存储设备等。计算机可读存储介质还可分布在网络耦接的计算机系统中使得计算机可读代码以分布式方式来存储和执行。70.计算机可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、射频(radiofrequency,rf)等,或者上述的任意合适的组合。71.在一些实施方案中,计算机可读存储介质可以是非暂态的。72.相对于现有技术,本发明的线程池内任务共享主线程多级缓存方法、系统及设备通过设置多级缓存查询方法,定义线程池,设置线程池内执行任务的方法,启动主线程,按照多级缓存查询方法将数据缓存到缓存中间件和本地,在主线程创建子任务,并提交到定义的线程池中,执行子任务,并从本地获取数据,实现线程池内的任务可以共享主线程缓存,从而使得子线程的处理速度更快,减少数据库和缓存中间件的压力,解决了现有技术中在一次请求内,异步任务不能共享主线程任务的数据,造成重复的网络调用,系统处理能力变低的技术问题。73.以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1