本发明涉及通信领域,具体而言,涉及一种队列处理方法及装置。
背景技术:
随着转售业务的不断扩展,系统处理的数据量剧增,越来越多的服务采用队列的处理方式,让高并发产生的数据进入队列中,有序的处理。
然而,数据的积压也会导致程序的处理效率受到影响,传统的队列方式还会造成与数据库交互输入输出(Input OutputInterface,简称IO)压力过大的问题。
因此,目前亟需提供一种高效且可控的队列处理机制,来解决IO压力大,效率低下的问题。
技术实现要素:
本发明的主要目的在于公开了一种呼叫限制方法及装置,以至少解决相关技术中队列方式还会造成与数据库交互输入输出IO压力过大的问题。
根据本发明的一个方面,提供了一种队列处理方法。
根据本发明的队列处理方法包括:判断REDIS队列中当前总数据量;如果所述总数据量大于或等于预定阈值,则等待第一预定时长之后,重新判断REDIS队列中的总数据量;如果所述总数据量小于预定阈值,则从数据库队列表中提取预定数量的数据,填充到REDIS队列中。
优选地,从数据库队列表中提取数据,填充到REDIS队列中包括:将数据库取出的数据,逐条填充到所述REDIS队列中,其中,将数据标识作为哈希表的键,将数据内容json串作为哈希表的值,一起保存到REDIS哈希表中。
优选地,上述方法还包括:在从所述REDIS队列提取数据时,判断所述REDIS队列是否为空;如果所述REDIS队列为空,则等待第二预定时长之后,再次尝试提取所述REDIS队列中的数据;如果所述REDIS队列不为空,则根据数据标识从哈希表中取出待处理的数据内容。
优选地,根据数据标识从哈希表中取出待处理的数据内容之后,还包括:按照业务需求处理所述数据内容,返回执行从所述REDIS队列中提取下一条数据的步骤。
根据本发明的另一方面,提供了一种队列处理装置。
根据本发明的队列处理装置包括:第一判断模块,用于判断REDIS队列中当前总数据量;第一处理模块,用于在所述总数据量大于或等于预定阈值时,等待第一预定时长之后,重新判断REDIS队列中的总数据量;第二处理模块,用于在所述总数据量小于预定阈值时,从数据库队列表中提取数据,填充到REDIS队列中。
与现有技术相比,本发明实施例至少具有以下优点:可以控制REDIS内存中的临时数据量,不会发生大量数据涌入内存导致溢出的情况,同时有效的限制了与数据库的IO频率。
附图说明
图1是根据本发明实施例的队列处理方法的流程图;
图2是根据本发明优选实施例的提取数据填充到REDIS队列中的流程图;
图3是根据本发明优选实施例的从REDIS队列中取数据处理的流程图;
图4是根据本发明实施例的队列处理装置的结构框图;
图5是根据本发明优选实施例的队列处理装置的结构框图。
具体实施方式
下面结合说明书附图对本发明的具体实现方式做一详细描述。
图1是根据本发明实施例的队列处理方法的流程图。如图1所示,该队列处理方法包括:
步骤S101:判断REDIS队列中当前总数据量;
步骤S103:如果上述总数据量大于或等于预定阈值,则等待第一预定时长之后,重新判断REDIS队列中的总数据量;
步骤S105:如果上述总数据量小于预定阈值,则从数据库队列表中提取预定的数据量,填充到REDIS队列中。
采用图1所示的方法,当REDIS队列中当前总数数据量大于或等于预定阈值,则等待第一预定时长之后,之后重新判断REDIS队列中的总数据量;当REDIS队列中当前总数据量小于预定阈值时,从数据库队列表中提取预定数量的数据,填充到REDIS队列中。可以控制REDIS内存中的临时数据量,不会发生大量数据涌入内存导致溢出的情况,同时有效的限制了与数据库的IO频率。
其中,上述的预定阈值以及预定数量均为可以根据实际情况动态设置的值,两者共同作用可以控制REDIS内存中的临时数据量,不会发生大量数据涌入内存导致溢出的情况,同时有效的限制了与数据库的IO频率。此外,可以根据所处理的数据量和要求的效率,按需调整处理进程数量。
优选地,从数据库队列表中提取数据,填充到REDIS队列中可以进一步包括:将数据库取出的数据,逐条填充到上述REDIS队列中,其中,将数据标识作为哈希表的键,将数据内容json串作为哈希表的值,一起保存到REDIS哈希表中。
优选地,上述队列处理方法还可以包括:在从上述REDIS队列提取数据时,判断上述REDIS队列是否为空;如果上述REDIS队列为空,则等待第二预定时长之后,再次尝试提取上述REDIS队列中的数据;如果上述REDIS队列不为空,则根据数据标识从哈希表中取出待处理的数据内容。
在根据数据标识从哈希表中取出待处理的数据内容之后,还可以包括以下处理:按照业务需求处理上述数据内容,返回执行从上述REDIS队列中提取下一条数据的步骤。
以下结合图2和图3进一步描述上述优选实施方式。
图2是根据本发明优选实施例的提取数据填充到REDIS队列中的流程图。如图2所示,主要包括以下步骤:
步骤S201:判断REDIS队列中的当前总数据量;如果小于预定阈值,执行步骤S203,否则,执行步骤S207。
步骤S203:从数据库对列表中提取预定数量的数据。
步骤S205:将数据库取出的数据,逐条录入REDIS队列中。其中,数据ID保存到REDIS队列中;数据ID作为哈希表的键,数据内容json串作为哈希表的值,保存到REDIS哈希表中。此批数据处理完成后,返回执行步骤S201。
步骤S207:等待1秒钟,然后返回执行步骤S201。
图3是根据本发明优选实施例的从REDIS队列中取数据处理的流程图。如图3所示,主要包括以下步骤:
步骤S301:提取REDIS队列中的数据(逐条处理)
步骤S303:判断该REDIS队列中的数据是否为空,如果是,执行步骤S305,否则,返回执行步骤S309。
步骤S305:如队列中有数据ID取出,根据队列ID,从哈希表中取出待处理的数据内容。
步骤S307:按照业务需求处理取出的数据,完成后返回执行步骤S301。
步骤S309:如队列中无数据,进程等待1秒,返回执行步骤S301,即再次尝试读取REDIS队列数据。
图4是根据本发明实施例的队列处理装置的结构框图。如图4所示,该队列处理装置包括:第一判断模块40,用于判断REDIS队列中当前总数据量;第一处理模块42,用于在上述总数据量大于或等于预定阈值时,等待第一预定时长之后,重新判断REDIS队列中的总数据量;第二处理模块44,用于在上述总数据量小于预定阈值时,从数据库队列表中提取数据,填充到REDIS队列中。
当REDIS队列中当前总数数据量大于或等于预定阈值,则第一处理模块42等待第一预定时长之后,之后重新判断REDIS队列中的总数据量;当REDIS队列中当前总数据量小于预定阈值时,第二处理模块44从数据库队列表中提取预定数量的数据,填充到REDIS队列中。采用该装置可以控制REDIS内存中的临时数据量,不会发生大量数据涌入内存导致溢出的情况,同时有效的限制了与数据库的IO频率。
优选地,如图5所示,上述第二处理模块44可以进一步包括:填充单元440,用于将数据库取出的数据,逐条填充到上述REDIS队列中,其中,将数据标识作为哈希表的键,将数据内容json串作为哈希表的值,一起保存到REDIS哈希表中。
优选地,如图5所示,上述装置还可以包括:第二判断模块46,用于在从上述REDIS队列提取数据时,判断上述REDIS队列是否为空;第一提取模块48,用于在上述REDIS队列为空时,等待第二预定时长之后,再次尝试提取上述REDIS队列中的数据;第二提取模块50,用于在上述REDIS队列不为空时,根据数据标识从哈希表中取出待处理的数据内容。
优选地,如图5所示,上述装置还可以包括:第三处理模块52,用于按照业务需求处理上述数据内容,返回执行从上述REDIS队列中提取下一条数据的步骤。
需要说明的是,上述队列处理装置中各个模块,各个单元相互结合实施的队列处理流程可以参见图1至图3的描述,此处不再赘述。
综上所述,借助本发明提供的上述实施例,一方面可以控制REDIS内存中的临时数据量,不会发生大量数据涌入内存导致溢出的情况,同时有效的限制了与数据库的IO频率,保证数据库运行稳定;另一方面,可以按需调配处理进程的数量,使得整个队列程序稳定高效,并且自由可控。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。