一种基于队列分拣任务机制的防止缓存击穿的方法技术

技术编号:23431645 阅读:23 留言:0更新日期:2020-02-25 13:05
本发明专利技术涉及数据缓存技术,其公开了一种基于队列分拣任务机制的防止缓存击穿的方法,使缓存层的数据一直保持有效,进而防止缓存击穿。本发明专利技术通过根据业务需求预设多个更新频率,利用队列异步分拣任务以及更新缓存数据达到防止击穿的目的;当新增一条缓存数据,在缓存分拣任务链表中添加对应记录,缓存分拣任务队列将该记录分拣到具体的执行任务队列中,同时将该记录在分拣任务链表中的状态维护成已分拣;执行任务队列提取执行任务表记录,将其中的更新时间和当前时间作校验,若校验通过,则将新增的缓存数据更新到缓存层,并移除执行任务表中的对应记录;否则,直接过滤掉数据,将任务移除并重新加入,同时将分拣任务链表中对应的记录更新为未分拣,以便下一次再轮询分拣。

A method to prevent buffer breakdown based on queue sorting task mechanism

【技术实现步骤摘要】
一种基于队列分拣任务机制的防止缓存击穿的方法
本专利技术涉及数据缓存技术,具体涉及一种基于队列分拣任务机制的防止缓存击穿的方法。
技术介绍
目前缓存技术在各个计算机领域得到广泛应用。尤其是在业务量巨大的时候,应用缓存能够很好的支撑起高并发访问。但无论是哪种缓存,在应用场景中都会存在缓存击穿的问题,所谓缓存击穿,就是指缓存因过期或系统故障的原因突然失效,正在访问的请求就会穿过缓存层直接请求数据库。尤其是在高并发的访问下,大量的请求压力会使数据库直接崩溃。所以有效防止缓存击穿是对每个缓存系统都是至关重要的。
技术实现思路
本专利技术所要解决的技术问题是:提出一种基于队列分拣任务机制的防止缓存击穿的方法,使缓存层的数据一直保持有效,进而防止缓存击穿。本专利技术解决上述技术问题采用的技术方案是:一种基于队列分拣任务机制的防止缓存击穿的方法,包括:设立缓存执行任务链表和缓存执行任务队列组模块;所述缓存执行任务链表用于存放被执行队列模块检索更新任务的信息;所述缓存执行任务队列组模块用于异步执行缓存信息更新任务的处理;设立缓存分拣任务链表和缓存分拣任务队列模块;所述缓存分拣任务链表用于存放待分拣的缓存信息;所述缓存分拣任务队列模块用于根据策略分拣缓存任务到对应执行队列中;设立执行任务队列回调接口,用于被执行队列调用,将对应的分拣记录状态更新为待分拣,将更新时间更新为当前时间;设立接收待分拣数据接口,用于接收待分配的数据源参数,将接收到的信息在缓存分拣任务链表中存储、更新或删除;缓存数据更新流程为:当新增一条缓存数据,在缓存分拣任务链表中添加对应记录,缓存分拣任务队列将该记录分拣到具体的执行任务队列中,同时将该记录在分拣任务链表中的状态维护成已分拣;执行任务队列提取执行任务表记录,将其中的更新时间和当前时间作校验,若校验通过,则将新增的缓存数据更新到缓存层,并移除执行任务表中的对应记录;否则,直接过滤掉数据,将任务移除并重新加入,同时将分拣任务链表中对应的记录更新为未分拣,以便下一次再轮询分拣。作为进一步优化,所述缓存执行任务链表包含任务名称、更新时间和任务具体参数。作为进一步优化,所述缓存信息更新任务的处理包括:包括判断是否可更新、更新数据到缓存层以及回调队列分拣任务模块。作为进一步优化,所述缓存分拣任务链表包含任务名称、更新时间、配对缓存执行任务编码和分拣状态。作为进一步优化,在设立缓存执行任务链表和缓存执行任务队列组模块之前,根据业务需要,预设缓存需要更新的频率,根据不同的频率段分别设置对应的任务链表以及对应的缓存执行任务队列,由各个缓存执行任务队列组成缓存执行任务队列组。作为进一步优化,所述缓存分拣任务队列模块根据策略分拣缓存任务到对应执行队列中,具体包括:将缓存分拣任务关系链表中的记录按照缓存更新时间戳顺序地取出,并根据配对的缓存更新执行队列编码分别将任务名和参数分拣到具体的缓存更新执行队列任务表中。本专利技术的有益效果是:通过根据业务需求预设多个更新频率,利用队列异步分拣任务以及更新缓存数据达到防止击穿的目的;本专利技术方案可以使缓存层数据不依赖过期时间,加入分拣任务的数据后可根据预设频率“永久”轮询更新,灵活可控,降低逻辑处理复杂度和耦合度,同时有效防止缓存击穿的情况。附图说明图1为本专利技术实施例中的基于队列分拣任务机制的防止缓存击穿的方法流程图。具体实施方式本专利技术旨在提出一种基于队列分拣任务机制的防止缓存击穿的方法,使缓存层的数据一直保持有效,进而防止缓存击穿。由于业务请求获取数据先到缓存层,缓存层相应数据若存在则直接返回;若不存在,由于要设容错机制需到其它数据层进行数据获取,并更新缓存层数据,同时返回相应数据。而本专利技术就是要尽量预防这种情况,通过缓存队列分拣任务、执行任务模块对缓存进行异步更新,使缓存数据一致存在,从而有效防止缓存击穿。在具体实现上,本专利技术防止缓存击穿的实施手段如下:1、设立缓存执行任务链表和队列组模块,具体为:设立缓存执行任务链表:根据业务需要,预设需要更新的频率,例如1分钟、3分钟、5分钟。根据这些不同的频率段分别设置对应的任务链表。该表可用redis或其他高性能检索的数据存储器。预设字段信息包含队列任务名称,队列任务具体参数,更新时间。该表被用于更新执行队列模块检索具体更新任务信息。设立缓存执行任务队列组:根据这些不同的频率段分别设置对应的更新执行队列,形成更新执行队列组。该队列组的作用是根据预设频率将数据更新到具体缓存层中对应的数据块。2、设立缓存分拣任务关系链表和队列模块,具体为:设立缓存分拣任务关系链表:可用MongoDB或其他支持有序查找集合的高性能数据存储器。预设字段信息包含缓存更新时间、对应的更新执行队列编码、分拣状态。该表被用于分拣任务队列检索待分拣的任务信息。设立缓存分拣任务队列模块:该任务模块被用作将缓存分拣任务关系链表中的记录按照缓存更新时间戳顺序地取出并根据配对的缓存更新执行队列编码分别将任务名和参数分拣到具体的缓存更新执行队列任务表中。被分拣后的记录需要更新分拣状态。3、设立用于执行任务队列回调接口,该接口用于执行队列在执行完任务后回调更新分拣任务状态和时间。4、设立接收待分拣数据接口,该接口用于接收待分配的数据源参数,将接收到的信息在分拣任务表中存储、更新或删除。5、缓存数据更新流程:当新增一条缓存数据,在分拣任务表中添加对应记录,分拣队列将该记录分拣到具体的执行队列中,同时该记录在分拣表中的状态维护成已分拣;执行任务队列提取执行任务表记录,将其中的更新时间和当前时间作校验,校验通过的将数据更新到缓存层,并移除执行任务表中的对应记录。否则直接过滤,将任务移除并重新加入。同时将分拣表中对应的记录更新为未分拣,以便下一次再轮询分拣。实施例:本实施例以更新商品实例对本专利技术的方案作详细描述,如图1所示,实现如下:(1)设立缓存执行任务链表和队列组模块:设立缓存执行任务链表:预设字段信息包含队列任务名称title,队列任务具体参数data,更新时间update_time。设立缓存执行任务队列组:根据这些不同的频率段分别设置对应的更新执行队列,形成更新执行队列组。如:设立执行任务队列doList1,该队列用于存放1分钟刷新缓存;设立执行任务队列doList2,该队列用于存放3分钟刷新缓存…以此类推,这些队列将在启动后扫描任务列表,提取任务信息,根据提取信息中的更新时间update_time和当前时间作校验,判断是否可执行,若可执行,则执行相应更新程序,执行完成后移除任务信息,并调用回调接口doCallback将分拣任务表中与该条信息配对的记录的信息更新,分拣状态is_out由1更新为0,更新信息update_time更新为当前时间;若不可执行,则移除任务信息,再将该信息重新加入队列任务,以便下次再扫描。设立本文档来自技高网...

【技术保护点】
1.一种基于队列分拣任务机制的防止缓存击穿的方法,其特征在于,包括:/n设立缓存执行任务链表和缓存执行任务队列组模块;所述缓存执行任务链表用于存放被执行队列模块检索更新任务的信息;所述缓存执行任务队列组模块用于异步执行缓存信息更新任务的处理;/n设立缓存分拣任务链表和缓存分拣任务队列模块;所述缓存分拣任务链表用于存放待分拣的缓存信息;所述缓存分拣任务队列模块用于根据策略分拣缓存任务到对应执行队列中;/n设立执行任务队列回调接口,用于被执行队列调用,将对应的分拣记录状态更新为待分拣,将更新时间更新为当前时间;/n设立接收待分拣数据接口,用于接收待分配的数据源参数,将接收到的信息在缓存分拣任务链表中存储、更新或删除;/n缓存数据更新流程为:/n当新增一条缓存数据,在缓存分拣任务链表中添加对应记录,缓存分拣任务队列将该记录分拣到具体的执行任务队列中,同时将该记录在分拣任务链表中的状态维护成已分拣;执行任务队列提取执行任务表记录,将其中的更新时间和当前时间作校验,若校验通过,则将新增的缓存数据更新到缓存层,并移除执行任务表中的对应记录;否则,直接过滤掉数据,将任务移除并重新加入,同时将分拣任务链表中对应的记录更新为未分拣,以便下一次再轮询分拣。/n...

【技术特征摘要】
1.一种基于队列分拣任务机制的防止缓存击穿的方法,其特征在于,包括:
设立缓存执行任务链表和缓存执行任务队列组模块;所述缓存执行任务链表用于存放被执行队列模块检索更新任务的信息;所述缓存执行任务队列组模块用于异步执行缓存信息更新任务的处理;
设立缓存分拣任务链表和缓存分拣任务队列模块;所述缓存分拣任务链表用于存放待分拣的缓存信息;所述缓存分拣任务队列模块用于根据策略分拣缓存任务到对应执行队列中;
设立执行任务队列回调接口,用于被执行队列调用,将对应的分拣记录状态更新为待分拣,将更新时间更新为当前时间;
设立接收待分拣数据接口,用于接收待分配的数据源参数,将接收到的信息在缓存分拣任务链表中存储、更新或删除;
缓存数据更新流程为:
当新增一条缓存数据,在缓存分拣任务链表中添加对应记录,缓存分拣任务队列将该记录分拣到具体的执行任务队列中,同时将该记录在分拣任务链表中的状态维护成已分拣;执行任务队列提取执行任务表记录,将其中的更新时间和当前时间作校验,若校验通过,则将新增的缓存数据更新到缓存层,并移除执行任务表中的对应记录;否则,直接过滤掉数据,将任务移除并重新加入,同时将分拣任务链表中对应的记录更新为未分拣,以便下一次再轮询分拣。


2.如权利要求1所述的一种基于队列分拣任务机制...

【专利技术属性】
技术研发人员:周林
申请(专利权)人:四川长虹电器股份有限公司
类型:发明
国别省市:四川;51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1