CN116069693A - 批量处理命令的方法、装置、电子设备及存储介质 - Google Patents
批量处理命令的方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN116069693A CN116069693A CN202211563917.3A CN202211563917A CN116069693A CN 116069693 A CN116069693 A CN 116069693A CN 202211563917 A CN202211563917 A CN 202211563917A CN 116069693 A CN116069693 A CN 116069693A
- Authority
- CN
- China
- Prior art keywords
- command
- request
- subclass
- client
- acquisition
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/161—Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
- G06F13/1621—Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement by maintaining request order
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1642—Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1673—Details of memory controller using buffers
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明实施例提供了一种批量处理命令的方法、装置、电子设备及存储介质,通过调用目标命令获取子类获取各个客户端发送的请求命令,并调用响应结果获取子类获取与各个请求命令对应的命令响应结果,实现“批量获取请求命令”+“批量返回命令响应结果”的批量处理请求命令的过程,然后将各个命令响应结果写入至同一命令结果集合中,将命令结果集合返回至各个客户端,实现同一时间点一次性返回不同命令响应结果至客户端的过程,大大降低了针对请求命令的RTT,以及客户端和集群服务器之间的网络延迟,提高了网络传输效率。
Description
技术领域
本发明涉及数据处理技术领域,特别是涉及一种批量处理命令的方法、一种批量处理命令的装置、一种电子设备以及一种计算机可读存储介质。
背景技术
服务器集群是指将多个服务器集中起来,共同进行同一种服务,对于客户端而言,像是只有一个服务器,集群可以利用多个计算机进行并行计算,以获得较高的计算速度,也可以利用多个计算机做备份,实现在某一个机器无法正常工作时,整个系统还是能正常运行,例如,服务器集群可以为Redis集群,Redis是一个高性能的key-value数据库,Jedis则是一个用java语言实现的Redis客户端,其可以同时支持单机模式、分片模式、集群模式的访问模式,通过构建Jedis对象可以进行数据访问,且Jedis客户端仅在单Redis节点上采用Pipeline,而在Cluster模式(集群模式)下不支持Pipeline。因此,若在Cluster模式下使用Jedis,则Jedis客户端仅能先将当前命令发送至Redis服务器,当Jedis客户端获取到Redis服务器针对当前命令返回的响应结果时,再按照命令执行顺序向Redis服务器发送下一条命令,获取下一条命令对应的响应结果,现有的多个命令向Redis服务器执行多次请求操作的方式,使得Jedis客户端消耗过多的RTT(Round trip time,往返时间),进而由于Jedis客户端的等待时间过长,导致Jedis客户端与Redis服务器之间出现网络延迟、网络传输效率低下等问题。
发明内容
本发明实施例是提供一种批量处理命令的方法、装置、电子设备以及计算机可读存储介质,以解决或部分解决现有技术在处理请求命令的过程中,不支持批量操作,针对请求命令的往返时间过长,造成客户端与服务端之间的网络延迟和网络传输效率低下的问题。
本发明实施例公开了一种批量处理命令的方法,所述方法包括:
获取服务器集群的目标命令获取子类以及响应结果获取子类,所述服务器集群包括若干个节点服务器,所述节点服务器包括命令输入缓冲区以及命令输出缓冲区,每一所述节点服务器对应一客户端;
根据所述目标命令获取子类,获取所述客户端发送至所对应的节点服务器的命令输入缓冲区中的请求命令以及所述请求命令对应的请求时序;
根据所述响应结果获取子类与所述请求命令的请求时序,分别从各个所述命令输出缓冲区中获取各所述请求命令对应的命令响应结果;
将各所述命令响应结果写入所述服务器集群的命令结果集合中,并将所述命令结果集合返回至所述客户端。
可选地,所述目标命令获取子类通过如下方式生成:
获取所述客户端的命令获取父类以及与所述命令获取父类存在继承关系的初始命令获取子类,所述命令请求父类包括第一通信连接对象,所述初始命令获取子类包括第二通信连接对象以及工厂函数;
采用所述继承关系将所述第二通信连接对象初始化为所述第一通信连接对象;
通过所述工厂函数创建与所述第一通信连接对象对应的目标命令获取子类。
可选地,所述目标命令获取子类包括模板函数,所述根据所述目标命令获取子类,获取所述客户端发送至所对应的节点服务器的命令输入缓冲区中的请求命令以及所述请求命令对应的请求时序,包括:
调用所述模板函数获取与所述节点服务器对应的各个客户端对象,以及所述各个客户端对象发送至所对应的节点服务器的命令输入缓冲区中的请求命令与所述请求命令对应的请求时序。
可选地,所述客户端包括与所述各个客户端对象对应的节点连接池,所述目标命令获取子类包括第一通信连接对象,所述第一通信连接对象包括槽位信息以及连接池映射关系,所述连接池映射关系为所述槽位信息与所述节点连接池之间一一对应的关系,所述调用所述模板函数获取与所述节点服务器对应的各个客户端对象,以及所述各个客户端对象发送至所对应的节点服务器的命令输入缓冲区中的请求命令与所述请求命令对应的请求时序,包括:
获取所述客户端预存在第一通信连接对象中的所述节点服务器所对应的槽位信息;
采用所述连接池映射关系,从各个所述节点连接池中确定与所述槽位信息对应的目标节点连接池;
调用所述模板函数获取从所述目标节点连接池中获取与所述节点服务器对应的各个客户端对象,以及所述各个客户端对象发送至所对应的节点服务器的命令输入缓冲区中的请求命令与所述请求命令对应的请求时序。
可选地,所述响应结果获取子类包括命令遍历函数,所述根据所述响应结果获取子类与所述请求命令的请求时序,分别从各个所述命令输出缓冲区中获取各所述请求命令对应的命令响应结果,包括:
调用所述命令遍历函数,确定与所述命令遍历函数对应的目标节点服务器,从所述命令输出缓冲区输出与所述目标节点服务器对应的目标请求命令;
按照各个所述目标请求命令的请求时序分别从所述命令输出缓冲区获取与所述目标请求命令对应的命令响应结果。
可选地,所述响应结果获取子类包括缓冲数据清除函数,所述将各所述命令响应结果写入所述服务器集群的命令结果集合中,并将所述命令结果集合返回至各个所述客户端,包括:
采用所述缓冲数据清除函数输出与各个所述节点服务器对应的所述命令输入缓冲区中的请求命令,并读取与各个所述节点服务器对应的所述命令输出缓冲区中的命令响应结果;
当所述缓冲数据清除函数执行完毕时,将各所述命令响应结果逐一写入所述服务器集群的命令结果集合中,并将所述命令结果集合返回至各个所述客户端。
本发明实施例还公开了一种批量处理命令的装置,所述装置包括:
子类获取模块,用于获取服务器集群的目标命令获取子类以及响应结果获取子类,所述服务器集群包括若干个节点服务器,所述节点服务器包括命令输入缓冲区以及命令输出缓冲区,每一所述节点服务器对应一客户端;
请求命令获取模块,用于根据所述目标命令获取子类,获取所述客户端发送至所对应的节点服务器的命令输入缓冲区中的请求命令以及所述请求命令对应的请求时序;
命令响应结果获取模块,用于根据所述响应结果获取子类与所述请求命令的请求时序,分别从各个所述命令输出缓冲区中获取各所述请求命令对应的命令响应结果;
命令结果集合返回模块,用于将各所述命令响应结果写入所述服务器集群的命令结果集合中,并将所述命令结果集合返回至所述客户端。
可选地,所述目标命令获取子类通过如下模块生成:
初始命令获取子类获取模块,用于获取所述客户端的命令获取父类以及与所述命令获取父类存在继承关系的初始命令获取子类,所述命令请求父类包括第一通信连接对象,所述初始命令获取子类包括第二通信连接对象以及工厂函数;
通信连接对象初始化模块,用于采用所述继承关系将所述第二通信连接对象初始化为所述第一通信连接对象;
目标命令获取子类获取模块,用于通过所述工厂函数创建与所述第一通信连接对象对应的目标命令获取子类。
可选地,所述目标命令获取子类包括模板函数,所述请求命令获取模块还包括:
请求命令获取子模块,用于调用所述模板函数获取与所述节点服务器对应的各个客户端对象,以及所述各个客户端对象发送至所对应的节点服务器的命令输入缓冲区中的请求命令与所述请求命令对应的请求时序。
可选地,所述客户端包括与所述各个客户端对象对应的节点连接池,所述目标命令获取子类包括第一通信连接对象,所述第一通信连接对象包括槽位信息以及连接池映射关系,所述连接池映射关系为所述槽位信息与所述节点连接池之间一一对应的关系,所述请求命令获取子模块具体用于:
获取所述客户端预存在第一通信连接对象中的所述节点服务器所对应的槽位信息;
采用所述连接池映射关系,从各个所述节点连接池中确定与所述槽位信息对应的目标节点连接池;
调用所述模板函数获取从所述目标节点连接池中获取与所述节点服务器对应的各个客户端对象,以及所述各个客户端对象发送至所对应的节点服务器的命令输入缓冲区中的请求命令与所述请求命令对应的请求时序。
可选地,所述响应结果获取子类包括命令遍历函数,所述命令响应结果获取模块具体用于:
调用所述命令遍历函数,确定与所述命令遍历函数对应的目标节点服务器,从所述命令输出缓冲区输出与所述目标节点服务器对应的目标请求命令;
按照各个所述目标请求命令的请求时序分别从所述命令输出缓冲区获取与所述目标请求命令对应的命令响应结果。
可选地,所述响应结果获取子类包括缓冲数据清除函数,所述命令结果集合返回模块具体用于:
采用所述缓冲数据清除函数输出与各个所述节点服务器对应的所述命令输入缓冲区中的请求命令,并读取与各个所述节点服务器对应的所述命令输出缓冲区中的命令响应结果;
当所述缓冲数据清除函数执行完毕时,将各所述命令响应结果逐一写入所述服务器集群的命令结果集合中,并将所述命令结果集合返回至各个所述客户端。
本发明实施例还公开了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口以及所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行存储器上所存放的程序时,实现如本发明实施例所述的方法。
本发明实施例还公开了一种计算机可读存储介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行如本发明实施例所述的方法。
本发明实施例包括以下优点:
在本发明实施例中,服务器集群包括若干个节点服务器,节点服务器包括命令输入缓冲区以及命令输出缓冲区,每一节点服务器对应一客户端,先获取服务器集群的目标命令获取子类以及响应结果获取子类,然后根据目标命令获取子类获取客户端发送至所对应的节点服务器的命令输出缓冲区中的请求命令以及请求命令对应的请求时序,根据响应结果获取子类与请求命令的请求时序,分别从各个命令输入缓冲区中获取各请求命令对应的命令响应结果,将各命令响应结果写入服务器集群的命令结果集合中,并将命令结果集合返回至客户端,从而通过调用目标命令获取子类获取各个客户端发送的请求命令,并调用响应结果获取子类获取与各个请求命令对应的命令响应结果,实现“批量获取请求命令”+“批量返回命令响应结果”的批量处理请求命令的过程,然后将各个命令响应结果写入至同一命令结果集合中,将命令结果集合返回至各个客户端,实现同一时间点一次性返回不同命令响应结果至客户端的过程,大大降低了针对请求命令的RTT,以及客户端和服务器集群之间的网络延迟,提高了网络传输效率。
附图说明
图1是本发明实施例中提供的一种批量处理命令方法的步骤流程图;
图2是本发明实施例中提供的目标命令获取子类结构的示意图;
图3本发明实施例中提供的请求命令处理过程的示意图;
图4是本发明实施例中提供的一种批量处理命令装置的结构框图;
图5是本发明实施例中提供的一种电子设备的硬件结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
作为一种示例,随着互联网技术的发展,Redis作为目前通用的缓存选型,所存储的value类型包括:string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型),在redis的Cluster集群模式下的键空间被分割为16384个槽(slot),其对应的节点数量也为16384个,每个主节点负责处理16384个哈希槽的其中一部分,在采用Cluster集群模式处理redis命令时,通常先根据key(键值)计算出一个槽位(slot),然后根据槽位去特定的redis节点上执行相应的操作,因此,在Cluster集群下,不存在跨redis节点进行数据处理的情况。然而Pipeline(管道模式)可以支持多key,进而对所有命令的进行操作,由于在数据处理时,Cluster集群模式和Pipeline对redis节点的执行过程不同,导致在Cluster集群模式下直接使用Pipeline会出现key映射到不同solt槽,从而Cluster集群模式可能会落到不同的redis节点上,这与Cluster集群模式自身的属性是矛盾的,Cluster集群模式无法支持Pipeline。因此,若相关技术人员在Cluster模式下使用客户端,则需要对多个操作命令向redis服务器执行多次请求操作,并将每一响应结果一一返回给客户端,从而导致客户端与服务端之间的RTT增加,造成网络传输效率低下、网络存在延迟的问题。
对此,本发明实施例的核心发明点之一在于,服务器集群包括若干个节点服务器,节点服务器包括命令输入缓冲区以及命令输出缓冲区,每一节点服务器对应一客户端,先获取服务器集群的目标命令获取子类以及响应结果获取子类,然后根据目标命令获取子类获取客户端发送至所对应的节点服务器的命令输出缓冲区中的请求命令以及请求命令对应的请求时序,根据响应结果获取子类与请求命令的请求时序,分别从各个命令输入缓冲区中获取各请求命令对应的命令响应结果,将各命令响应结果写入服务器集群的命令结果集合中,并将命令结果集合返回至客户端,从而通过调用目标命令获取子类获取各个客户端发送的请求命令,并调用响应结果获取子类获取与各个请求命令对应的命令响应结果,实现“批量获取请求命令”+“批量返回命令响应结果”的批量处理请求命令的过程,然后将各个命令响应结果写入至同一命令结果集合中,将命令结果集合返回至各个客户端,实现同一时间点一次性返回不同命令响应结果至客户端的过程,大大降低了针对请求命令的RTT,以及客户端和服务器之间的网络延迟,提高了网络传输效率。
在本发明的一种示例中,服务器集群可以为Redis集群,Redis集群是一个分布式(distributed)、容错(fault-tolerant)的Redis实现,Redis集群提供了一种运行Redis的方式,其包括了若干个redis节点,数据可以在多个Redis节点间自动分区。
节点服务器可以为与redis节点对应的服务器,redis节点包括一个主节点以及至少一个从节点,相应的,节点服务器可以包括主服务器和从服务器,通过采用redis集群可以增加服务器数量,实现批量处理命令的功能,使服务器达到高效、稳定的状态。
客户端可以为jedis客户端,Jedis客户端支持单命令和Pipeline方式访问Redis集群,通过Pipeline的方式能够提高集群访问的效率,jedis客户端中包括至少一个jedis对象,通过jedis对象与redis服务器进行通信连接。
在本发明中,以服务器集群为redis集群、客户端为jedis客户端、客户端对象为jedis对象作为示例进行说明。
参照图1,示出了本发明实施例中提供的一种批量处理命令的方法的步骤流程图,具体可以包括如下步骤:
步骤101,获取服务器集群的目标命令获取子类以及响应结果获取子类,所述服务器集群包括若干个节点服务器,所述节点服务器包括命令输入缓冲区以及命令输出缓冲区,每一所述节点服务器对应一客户端;
在本发明实施例中,目标命令获取子类可以为相关技术人员自定义的子类,以实现jedis客户端在Redis Cluster模式下支持pipeline处理请求命令,例如,技术人员实现ClusterPipeline类继承Jedis客户端的PipelineBase类,则可以通过ClusterPipeline类使用PipelineBase类中的get、set等方法或者模板方法(getClient)获取jedis客户端,以及jedis客户端发送的请求命令,目标命令获取子类可以包括get、set以及getClient等函数。响应结果获取子类可以为用于从命令输入缓冲区获取请求命令的命令响应结果的类,例如,通过ClusterPipeline类的syncAndReturnAll方法获取各个请求命令的各个命令响应结果,然后采用getOne方法按照请求时序获取当前请求命令对应的响应结果,命令响应结果子类可以包括syncAndReturnAll、getOne等函数。
可选地,缓冲区可以为暂时存放命令数据的内存空间,其至少包括用于存储请求命令的命令输入缓冲区和用于存储命令响应结果的命令输出缓冲区。其中,命令输入缓冲区可以为与各个jedis客户端对应的、暂时存储jedis客户端发送过来的请求命令的缓冲区,命令输出缓冲区可以为存储redis服务器发送的各个请求命令所对应的命令响应结果的缓冲区,从而通过采用命令输入缓冲区和命令输出缓冲区存储请求命令和命令响应结果,避免了由于redis服务器处理数据和命令的速度小于发送速度,造成数据丢失和性能变差的问题。
可选地,目标命令获取子类通过如下方式生成:
S11,获取所述客户端的命令获取父类以及与所述命令获取父类存在继承关系的初始命令获取子类,所述命令请求父类包括第一通信连接对象,所述初始命令获取子类包括第二通信连接对象以及工厂函数;
S12,采用所述继承关系将所述第二通信连接对象初始化为所述第一通信连接对象;
可选地,命令获取父类可以为Jedis客户端提供的BinaryJedisCluster父类,BinaryJedisCluster父类包括了构造函数和各种命令,jedis客户端可以通过构建的JedisCluster子类继承BinaryJedisCluster父类,一方面可以获得BinaryJedisCluster父类中redis集群的各种信息,另一方面可以通过JedisCluster类将jedis客户端封装成具有pipeline的客户端。
具体的,JedisCluster所继承的父类BinaryJedisCluster类创建了JedisSlotBasedConnectionHandler对象(第一通信连接对象),第一通信连接对象可以为负责通过构造函数和redis集群进行通信的对象,如JedisSlotBasedConnectionHandler对象,JedisSlotBasedConnectionHandler对象(第一通信连接对象)的核心在于创建并初始化JedisClusterInfoCache对象,JedisClusterInfoCache对象缓存了Redis集群的节点信息、槽位信息以及节点与槽位之间一一对应的关系等。其中,JedisClusterInfoCache中的slots用来保存槽位信息和集群节点信息,nodes和slots维持的对象均为JedisPool对象,通过该对象可以实现集群节点和槽位的发现。
其中,初始命令获取子类可以为由jedis客户端提供的子类,其包括第二通信连接对象,第二通信连接对象可以为命令获取父类提供的通信对象或者连接处理器,然后根据继承关系将初始命令获取子类的第二通信连接对象初始化为命令获取父类的第一通信连接对象。
在一种示例中,初始命令获取子类可以为继承了JedisCluster的BaseJedisCluster类,第二通信连接对象可以为JedisSlotConnectionHandler对象,实现BaseJedisCluster子类继承了BinaryJedisCluster中的JedisCluster类,从而在BaseJedisCluster子类的构造函数中,将第二通信连接对象(JedisSlotConnectionHandler对象)初始化为BinaryJedisCluster类创建的第一通信连接对象(JedisSlotBasedConnectionHandler对象),使得BaseJedisCluster子类可以通过第一通信连接对象得到cache字段的访问权限,根据slot从cache中获取到相应的节点连接池或者连接对象池。
S13,通过所述初始命令获取子类的工厂函数创建与所述第一通信连接对象对应的目标命令获取子类。
可选地,工厂函数可以为由初始命令获取子类提供的用于创建目标命令获取子类的函数,如pipelined(),从而在创建的过程中,使目标命令获取子类拥有初始命令获取子类以及命令获取父类的各种函数、属性以及访问权限等。
步骤102,根据所述目标命令获取子类,获取所述客户端发送至所对应的节点服务器的命令输入缓冲区中的请求命令以及所述请求命令对应的请求时序;
在本发明实施例中,先确定jedis客户端对应的redis节点以及redis节点对应的命令输入缓冲区,然后采用目标命令获取子类从命令输入缓冲区中获取各个请求命令,同时记录请求命令对应的请求时序。
可选地,jedis客户端可以包括jedis对象,调用目标命令获取子类的模板函数获取与redis节点对应的jedis对象,分别由各个jedis对象将各个请求命令发送至所对应的redis节点的命令输入缓冲区中,同时记录请求命令的请求时序。
具体的,jedis对象可以为jedis客户端的实例对象,如client,每个Jedis对象在内部建立了一个Socket(套接字)和Redis服务器的连接,套接字是是支持TCP/IP协议的路通信的基本操作单元,在Jedis对象使用完毕后可以对其进行关闭。
在具体实现中,先获取jedis客户端预存在第一通信连接对象中各个redis节点所对应的槽位信息,然后根据第一通信连接对象的连接池映射关系,确定与槽位信息对应的节点连接池,其中,连接池映射关系可以为槽位信息与节点连接池的一一对应关系,获取到节点连接池之后,调用模板函数获取从节点连接池中获取与redis节点对应的jedis对象,以及jedis对象发送至所对应的redis节点的命令输入缓冲区中的请求命令与请求命令对应的请求时序。
其中,槽位信息可以为redis集群内数据管理和数据迁移的基本单位,槽位信息的范围是0~16383,节点连接池JedisPool可以为jedis客户端内部管理redis的连接资源,通过节点连接池优化对redis的访问,连接池映射关系则可以为连接池映射关系为槽位信息与节点连接池之间一一对应的关系,从而可以根据redis节点确定对应的槽位信息,匹配与槽位信息对应的节点连接池,进而从节点连接池中确定对应的各个jedis对象。
在JedisCluster初始化时,redis集群的连接信息、配置信息均封装在第一通信连接对象中的JedisClusterInfoCache中,在JedisClusterInfoCache中,除了保存redis节点和槽位之间的一一对应关系以外,还可以为每个节点建立一个对应的节点连接池JedisPool,从而为后续获取jedis对象和JedisPool提供数据需求,且由于jedis是非线程安全的,可以通过使用节点连接池JedisPool保证线程安全。
在一种示例中,参照图2,示出了本发明实施例中提供的目标命令获取子类结构的示意图,S21,实现JedisSlotConnectionHandler对象(第二通信连接对象)继承JedisSlotBasedConnectionHandler对象(第一通信连接对象),从而拥有JedisClusterConnectionHandler对象的cache访问权限,JedisClusterConnectionHandler相当于cache类的一个数据获取窗口,因此可以通过采用getJedisPoolFromSlot(intslot)方法,根据slot从cache获取对应的JedisPool;S22,实现BaseJedisCluster继承JedisCluster,在构造方法中,将ConnectionHandler初始化为JedisSlotConnectionHandler。JedisCluster也实现了getJedisPoolFromSlot(intslot)方法;S23,BaseJedisCluster通过采用pipelined()方法(工厂函数)创建了ClusterPipeline,创建时使ClusterPipeline持有BaseJedisCluster的各种方法、函数、属性等信息,进而ClusterPipeline可以调用BaseJedisCluster.getJedisPoolFromSlot(intslot)获取JedisPool,再从JedisPool中获取Jedis客户端,以及与jedis客户端对应的Client(jedis对象)。
步骤103,根据所述响应结果获取子类与所述请求命令的请求时序,分别从各个所述命令输出缓冲区中获取各所述请求命令对应的命令响应结果;
在本发明实施例中,在获取到请求命令以及对应的jedis对象之后,可以根据响应结果获取子类和请求命令的请求时序的先后顺序,分别从redis节点对应的命令输出缓冲区中获取各个请求命令对应的各个命令响应结果。
在具体实现中,调用响应结果获取子类的命令遍历函数,依次从命令输入缓冲区输出与各个目标redis节点对应的目标请求命令,按照各个目标请求命令的请求时序分别从命令输出缓冲区获取与目标请求命令对应的命令响应结果。
在一种示例中,假设jedis客户端向redis服务器发送了三条请求命令:请求命令A、请求命令B、请求命令C,且各个请求命令存储至命令输入缓冲区中,则redis服务器可以在接收到三条请求命令以及对应的请求时序之后,通过调用CommandOrder遍历命令,按照请求命令的执行时间的先后顺序,分别从命令输入缓冲区输出目标请求命令A1、目标请求命令B1、目标请求命令C1,然后分别从命令输出缓冲区中获取到与请求命令A1对应的命令响应结果a、请求命令B1对应的命令响应结果b、请求命令C1对应的命令响应结果c。
步骤104,将各所述命令响应结果写入所述服务器集群的命令结果集合中,并将所述命令结果集合返回至所述客户端。
在本发明实施例中,将按照时序获取到的命令响应结果一个个写入redis集群中的命令结果集合中,由redis服务器将包含各个命令响应结果的命令结果集合返回至jedis客户端的各个jedis对象。
在具体实现中,命令响应结果获取子类包括缓冲数据清除函数,采用缓冲数据清除函数输出命令输出缓冲区的各个请求命令,并读取命令输入缓冲区的各个命令响应结果当缓冲数据清除函数执行完毕时,将各命令响应结果逐一写入redis集群的命令结果集合中,并将命令结果集合返回至jedis客户端的各个jedis对象。
可选地,缓冲数据清除函数可以为清空命令输入缓冲区和命令输出缓冲区中全部数据的函数,例如,调用jedis客户端的getAll()方法,采用该方法会将命令输入缓冲区中的命令全部刷出,同时一次性读取命令输出缓冲区的全部数据,从而实现缓冲区数据的清除,防止对下一次命令执行造成污染。
作为一种示例,参照图3,示出了本发明实施例中提供的请求命令处理过程的示意图,第一步,根据key计算出当前pipeline会使用到的redis节点对应的各个jedis对象,key所对应的每个子类可以维护着自己唯一的整数键域,使得子类中的元素能够被其他类进行访问,管理可复用的元素,如通过key计算出对应的jedis对象之后,Clusterpipiline子类可以基于相应的jedis对象访问JedisPool,进而从JedisPool中获取Jedis,具体可以为:自定义一个可以实现Pipeline的子类---ClusterPipeline类,实现ClusterPipeline类继承JedisPipelineBase类,使得自定义的Clusterpipiline子类可以采用JedisPipelineBase父类的connecttionHandler连接处理器建立key、slot以及JedisPool之间的关系映射,然后ClusterPipeline子类可以调用实现在PipelineBaseget父类的get、set、模板方法(getClient)等方法获取各个与redis集群连接的jedis对象---Client,并记录请求命令的执行顺序(请求时序),由Client将命令写入命令输入缓冲区中;第二步,通过获取相同槽位信息的key,并依据key对其所在的redis节点进行分组,为各个子类对应的命令操作提供执行基础,实现使用同一个pipeline去执行命令和获取结果,具体操作可以为:调用ClusterPipeline子类的syncAndReturnAll获取响应结果,按照执行顺序(请求时序)通过命令遍历函数---CommandOrder以及命令获取函数---getOne,将请求命令从命令输入缓冲区刷出,并从命令输出缓冲区获取一个命令响应结果;第三步,合并当次pipeline所有的response返回,并将所有的response连接释放返回到JedisPool中:将得到的命令响应结果写入命令结果集合中,在返回命令响应结果之前需要清空各个Client对应的命令输入缓冲区和命令输出缓冲区,从而能够将命令按照key的不同节点进行分组,并同一组命令(执行多个命令)打包发送,实现一次性返回各个命令响应结果的过程,以降低客户端与服务端之间请求命令的RTT以外,还可以防止对下一次命令执行造成污染。
需要说明的是,对于控制终端与显示终端之间的数据通信过程,属于本领域的现有技术,在本发明实施例中描述得较为简单,可以理解的是,相关技术过程可以参照对应的现有技术,本发明对此不作限制。
在本发明实施例中,服务器集群包括若干个节点服务器,节点服务器包括命令输入缓冲区以及命令输出缓冲区,每一节点服务器对应一客户端,先获取服务器集群的目标命令获取子类以及响应结果获取子类,然后根据目标命令获取子类获取客户端发送至所对应的节点服务器的命令输出缓冲区中的请求命令以及请求命令对应的请求时序,根据响应结果获取子类与请求命令的请求时序,分别从各个命令输入缓冲区中获取各请求命令对应的命令响应结果,将各命令响应结果写入服务器集群的命令结果集合中,并将命令结果集合返回至客户端,从而通过调用目标命令获取子类获取各个客户端发送的请求命令,并调用响应结果获取子类获取与各个请求命令对应的命令响应结果,实现“批量获取请求命令”+“批量返回命令响应结果”的批量处理请求命令的过程,然后将各个命令响应结果写入至同一命令结果集合中,将命令结果集合返回至各个客户端,实现同一时间点一次性返回不同命令响应结果至客户端的过程,大大降低了针对请求命令的RTT,以及客户端和服务器之间的网络延迟,提高了网络传输效率。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图4,示出了本发明实施例中提供的一种批量处理命令的装置的结构框图,具体可以包括如下模块:
子类获取模块401,用于获取服务器集群的目标命令获取子类以及响应结果获取子类,所述服务器集群包括若干个节点服务器,所述节点服务器包括命令输入缓冲区以及命令输出缓冲区,每一所述节点服务器对应一客户端;
请求命令获取模块402,用于根据所述目标命令获取子类,获取所述客户端发送至所对应的节点服务器的命令输入缓冲区中的请求命令以及所述请求命令对应的请求时序;
命令响应结果获取模块403,用于根据所述响应结果获取子类与所述请求命令的请求时序,分别从各个所述命令输出缓冲区中获取各所述请求命令对应的命令响应结果;
命令结果集合返回模块404,用于将各所述命令响应结果写入所述服务器集群的命令结果集合中,并将所述命令结果集合返回至所述客户端。
在一种可选实施例中,所述目标命令获取子类通过如下模块生成:
初始命令获取子类获取模块,用于获取所述客户端的命令获取父类以及与所述命令获取父类存在继承关系的初始命令获取子类,所述命令请求父类包括第一通信连接对象,所述初始命令获取子类包括第二通信连接对象以及工厂函数;
通信连接对象初始化模块,用于采用所述继承关系将所述第二通信连接对象初始化为所述第一通信连接对象;
目标命令获取子类获取模块,用于通过所述工厂函数创建与所述第一通信连接对象对应的目标命令获取子类。
在一种可选实施例中,所述目标命令获取子类包括模板函数,所述请求命令获取模块还包括:
请求命令获取子模块,用于调用所述模板函数获取与所述节点服务器对应的各个客户端对象,以及所述各个客户端对象发送至所对应的节点服务器的命令输入缓冲区中的请求命令与所述请求命令对应的请求时序。
在一种可选实施例中,所述客户端包括与所述各个客户端对象对应的节点连接池,所述目标命令获取子类包括第一通信连接对象,所述第一通信连接对象包括槽位信息以及连接池映射关系,所述连接池映射关系为所述槽位信息与所述节点连接池之间一一对应的关系,所述请求命令获取子模块具体用于:
获取所述客户端预存在第一通信连接对象中的所述节点服务器所对应的槽位信息;
采用所述连接池映射关系,从各个所述节点连接池中确定与所述槽位信息对应的目标节点连接池;
调用所述模板函数获取从所述目标节点连接池中获取与所述节点服务器对应的各个客户端对象,以及所述各个客户端对象发送至所对应的节点服务器的命令输入缓冲区中的请求命令与所述请求命令对应的请求时序。
在一种可选实施例中,所述响应结果获取子类包括命令遍历函数,所述命令响应结果获取模块具体用于:
调用所述命令遍历函数,确定与所述命令遍历函数对应的目标节点服务器,从所述命令输出缓冲区输出与所述目标节点服务器对应的目标请求命令;
按照各个所述目标请求命令的请求时序分别从所述命令输出缓冲区获取与所述目标请求命令对应的命令响应结果。
在一种可选实施例中,所述响应结果获取子类包括缓冲数据清除函数,所述命令结果集合返回模块具体用于:
采用所述缓冲数据清除函数输出与各个所述节点服务器对应的所述命令输入缓冲区中的请求命令,并读取与各个所述节点服务器对应的所述命令输出缓冲区中的命令响应结果;
当所述缓冲数据清除函数执行完毕时,将各所述命令响应结果逐一写入所述服务器集群的命令结果集合中,并将所述命令结果集合返回至各个所述客户端。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
另外,本发明实施例还提供了一种电子设备,包括:处理器,存储器,存储在存储器上并可在处理器上运行的计算机程序,该计算机程序被处理器执行时实现上述批量处理命令的方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述XX方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等。
图5为实现本发明各个实施例的一种电子设备的硬件结构示意图。
该电子设备500包括但不限于:射频单元501、网络模块502、音频输出单元503、输入单元504、传感器505、显示单元506、用户输入单元507、接口单元508、存储器509、处理器510、以及电源511等部件。本领域技术人员可以理解,图5中示出的电子设备结构并不构成对电子设备的限定,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。在本发明实施例中,电子设备包括但不限于手机、平板电脑、笔记本电脑、掌上电脑、车载终端、可穿戴设备、以及计步器等。
应理解的是,本发明实施例中,射频单元501可用于收发信息或通话过程中,信号的接收和发送,具体的,将来自基站的下行数据接收后,给处理器510处理;另外,将上行的数据发送给基站。通常,射频单元501包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器、双工器等。此外,射频单元501还可以通过无线通信系统与网络和其他设备通信。
电子设备通过网络模块502为用户提供了无线的宽带互联网访问,如帮助用户收发电子邮件、浏览网页和访问流式媒体等。
音频输出单元503可以将射频单元501或网络模块502接收的或者在存储器509中存储的音频数据转换成音频信号并且输出为声音。而且,音频输出单元503还可以提供与电子设备500执行的特定功能相关的音频输出(例如,呼叫信号接收声音、消息接收声音等等)。音频输出单元503包括扬声器、蜂鸣器以及受话器等。
输入单元504用于接收音频或视频信号。输入单元504可以包括图形处理器(Graphics Processing Unit,GPU)5041和麦克风5042,图形处理器5041对在视频捕获模式或图像捕获模式中由图像捕获装置(如摄像头)获得的静态图片或视频的图像数据进行处理。处理后的图像帧可以显示在显示单元506上。经图形处理器5041处理后的图像帧可以存储在存储器509(或其它存储介质)中或者经由射频单元501或网络模块502进行发送。麦克风5042可以接收声音,并且能够将这样的声音处理为音频数据。处理后的音频数据可以在电话通话模式的情况下转换为可经由射频单元501发送到移动通信基站的格式输出。
电子设备500还包括至少一种传感器505,比如光传感器、运动传感器以及其他传感器。具体地,光传感器包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板5061的亮度,接近传感器可在电子设备500移动到耳边时,关闭显示面板5061和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别电子设备姿态(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;传感器505还可以包括指纹传感器、压力传感器、虹膜传感器、分子传感器、陀螺仪、气压计、湿度计、温度计、红外线传感器等,在此不再赘述。
显示单元506用于显示由用户输入的信息或提供给用户的信息。显示单元506可包括显示面板5061,可以采用液晶显示器(Liquid Crystal Display,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板5061。
用户输入单元507可用于接收输入的数字或字符信息,以及产生与电子设备的用户设置以及功能控制有关的键信号输入。具体地,用户输入单元507包括触控面板5071以及其他输入设备5072。触控面板5071,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板5071上或在触控面板5071附近的操作)。触控面板5071可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器510,接收处理器510发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板5071。除了触控面板5071,用户输入单元507还可以包括其他输入设备5072。具体地,其他输入设备5072可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆,在此不再赘述。
进一步的,触控面板5071可覆盖在显示面板5061上,当触控面板5071检测到在其上或附近的触摸操作后,传送给处理器510以确定触摸事件的类型,随后处理器510根据触摸事件的类型在显示面板5061上提供相应的视觉输出。虽然在图5中,触控面板5071与显示面板5061是作为两个独立的部件来实现电子设备的输入和输出功能,但是在某些实施例中,可以将触控面板5071与显示面板5061集成而实现电子设备的输入和输出功能,具体此处不做限定。
接口单元508为外部装置与电子设备500连接的接口。例如,外部装置可以包括有线或无线头戴式耳机端口、外部电源(或电池充电器)端口、有线或无线数据端口、存储卡端口、用于连接具有识别模块的装置的端口、音频输入/输出(I/O)端口、视频I/O端口、耳机端口等等。接口单元508可以用于接收来自外部装置的输入(例如,数据信息、电力等等)并且将接收到的输入传输到电子设备500内的一个或多个元件或者可以用于在电子设备500和外部装置之间传输数据。
存储器509可用于存储软件程序以及各种数据。存储器509可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器509可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
处理器510是电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器509内的软件程序和/或模块,以及调用存储在存储器509内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。处理器510可包括一个或多个处理单元;优选的,处理器510可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器510中。
电子设备500还可以包括给各个部件供电的电源511(比如电池),优选的,电源511可以通过电源管理系统与处理器510逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
另外,电子设备500包括一些未示出的功能模块,在此不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。
本领域普通技术人员可以意识到,结合本发明实施例中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种批量处理命令的方法,其特征在于,所述方法包括:
获取服务器集群的目标命令获取子类以及响应结果获取子类,所述服务器集群包括若干个节点服务器,所述节点服务器包括命令输入缓冲区以及命令输出缓冲区,每一所述节点服务器对应一客户端;
根据所述目标命令获取子类,获取所述客户端发送至所对应的节点服务器的命令输入缓冲区中的请求命令以及所述请求命令对应的请求时序;
根据所述响应结果获取子类与所述请求命令的请求时序,分别从各个所述命令输出缓冲区中获取各所述请求命令对应的命令响应结果;
将各所述命令响应结果写入所述服务器集群的命令结果集合中,并将所述命令结果集合返回至所述客户端。
2.根据所述权利要求1所述的方法,其特征在于,所述目标命令获取子类通过如下方式生成:
获取所述客户端的命令获取父类以及与所述命令获取父类存在继承关系的初始命令获取子类,所述命令获取父类包括第一通信连接对象,所述初始命令获取子类包括第二通信连接对象以及工厂函数;
采用所述继承关系将所述第二通信连接对象初始化为所述第一通信连接对象;
通过所述工厂函数创建与所述第一通信连接对象对应的目标命令获取子类。
3.根据权利要求2所述的方法,其特征在于,所述目标命令获取子类包括模板函数,所述根据所述目标命令获取子类,获取所述客户端发送至所对应的节点服务器的命令输入缓冲区中的请求命令以及所述请求命令对应的请求时序,包括:
调用所述模板函数获取与所述节点服务器对应的各个客户端对象,以及所述各个客户端对象发送至所对应的节点服务器的命令输入缓冲区中的请求命令与所述请求命令对应的请求时序。
4.根据权利要求3所述的方法,其特征在于,所述客户端包括与所述各个客户端对象对应的节点连接池,所述目标命令获取子类包括第一通信连接对象,所述第一通信连接对象包括槽位信息以及连接池映射关系,所述连接池映射关系为所述槽位信息与所述节点连接池之间一一对应的关系,所述调用所述模板函数获取与所述节点服务器对应的各个客户端对象,以及所述各个客户端对象发送至所对应的节点服务器的命令输入缓冲区中的请求命令与所述请求命令对应的请求时序,包括:
获取所述客户端预存在第一通信连接对象中的所述节点服务器所对应的槽位信息;
采用所述连接池映射关系,从各个所述节点连接池中确定与所述槽位信息对应的目标节点连接池;
调用所述模板函数获取从所述目标节点连接池中获取与所述节点服务器对应的各个客户端对象,以及所述各个客户端对象发送至所对应的节点服务器的命令输入缓冲区中的请求命令与所述请求命令对应的请求时序。
5.根据权利要求1所述的方法,其特征在于,所述响应结果获取子类包括命令遍历函数,所述根据所述响应结果获取子类与所述请求命令的请求时序,分别从各个所述命令输出缓冲区中获取各所述请求命令对应的命令响应结果,包括:
调用所述命令遍历函数,确定与所述命令遍历函数对应的目标节点服务器,从所述命令输出缓冲区输出与所述目标节点服务器对应的目标请求命令;
按照各个所述目标请求命令的请求时序分别从所述命令输出缓冲区获取与所述目标请求命令对应的命令响应结果。
6.根据权利要求1所述的方法,其特征在于,所述响应结果获取子类包括缓冲数据清除函数,所述将各所述命令响应结果写入所述服务器集群的命令结果集合中,并将所述命令结果集合返回至各个所述客户端,包括:
采用所述缓冲数据清除函数输出与各个所述节点服务器对应的所述命令输入缓冲区中的请求命令,并读取与各个所述节点服务器对应的所述命令输出缓冲区中的命令响应结果;
当所述缓冲数据清除函数执行完毕时,将各所述命令响应结果逐一写入所述服务器集群的命令结果集合中,并将所述命令结果集合返回至各个所述客户端。
7.一种批量处理命令的装置,其特征在于,所述装置包括:
子类获取模块,用于获取服务器集群的目标命令获取子类以及响应结果获取子类,所述服务器集群包括若干个节点服务器,所述节点服务器包括命令输入缓冲区以及命令输出缓冲区,每一所述节点服务器对应一客户端;
请求命令获取模块,用于根据所述目标命令获取子类,获取所述客户端发送至所对应的节点服务器的命令输入缓冲区中的请求命令以及所述请求命令对应的请求时序;
命令响应结果获取模块,用于根据所述响应结果获取子类与所述请求命令的请求时序,分别从各个所述命令输出缓冲区中获取各所述请求命令对应的命令响应结果;
命令结果集合返回模块,用于将各所述命令响应结果写入所述服务器集群的命令结果集合中,并将所述命令结果集合返回至所述客户端。
8.根据权利要求7所述的装置,其特征在于,所述目标命令获取子类通过如下模块生成:
初始命令获取子类获取模块,用于获取所述客户端的命令获取父类以及与所述命令获取父类存在继承关系的初始命令获取子类,所述命令请求父类包括第一通信连接对象,所述初始命令获取子类包括第二通信连接对象以及工厂函数;
通信连接对象初始化模块,用于采用所述继承关系将所述第二通信连接对象初始化为所述第一通信连接对象;
目标命令获取子类获取模块,用于通过所述工厂函数创建与所述第一通信连接对象对应的目标命令获取子类。
9.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口以及所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行存储器上所存放的程序时,实现如权利要求1-6任一项所述的方法。
10.一种计算机可读存储介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行如权利要求1-6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211563917.3A CN116069693A (zh) | 2022-12-07 | 2022-12-07 | 批量处理命令的方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211563917.3A CN116069693A (zh) | 2022-12-07 | 2022-12-07 | 批量处理命令的方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116069693A true CN116069693A (zh) | 2023-05-05 |
Family
ID=86182973
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211563917.3A Pending CN116069693A (zh) | 2022-12-07 | 2022-12-07 | 批量处理命令的方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116069693A (zh) |
-
2022
- 2022-12-07 CN CN202211563917.3A patent/CN116069693A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110232048B (zh) | 日志文件的获取方法、装置及存储介质 | |
CN109471690B (zh) | 一种消息显示方法及终端设备 | |
WO2018006841A1 (zh) | 二维码信息传输方法、装置以及设备 | |
CN107704363B (zh) | 冻屏监测方法、移动终端及计算机可读存储介质 | |
CN109995862B (zh) | 一种资源调度方法及终端 | |
CN108984066B (zh) | 一种应用程序图标显示方法及移动终端 | |
CN112084747B (zh) | 一种资源管理方法、装置、电子设备及存储介质 | |
JP7136416B2 (ja) | モデルファイル管理方法および端末デバイス | |
CN111399819B (zh) | 数据生成方法、装置、电子设备及存储介质 | |
CN111444237A (zh) | 服务器系统、数据传输方法及电子设备 | |
CN109144723B (zh) | 一种分配存储空间的方法和终端 | |
WO2019179068A1 (zh) | 风险检测方法、装置、移动终端和存储介质 | |
CN107341032B (zh) | 一种数据加载方法、移动终端及计算机可读存储介质 | |
CN113238868A (zh) | 任务处理方法、装置、服务器、设备、系统及存储介质 | |
CN109889568B (zh) | 一种数据导出方法、服务器及系统 | |
CN111142998A (zh) | 后台应用的分享方法及电子设备 | |
CN116610508A (zh) | 一种散热测试方法、装置、电子设备及存储介质 | |
CN115589432A (zh) | 消息推送管理方法、装置、介质及设备 | |
CN112559532B (zh) | 一种基于红黑树的数据插入方法、装置及电子设备 | |
CN116069693A (zh) | 批量处理命令的方法、装置、电子设备及存储介质 | |
CN110442361B (zh) | 一种灰度发布方法、装置及电子设备 | |
CN111475141A (zh) | 榜单的生成方法、装置及电子设备 | |
CN110659329A (zh) | 一种数据处理方法、装置及电子设备 | |
CN117806857B (zh) | 故障定位信息生成方法、装置、电子设备及存储介质 | |
CN115905160B (zh) | 数据存储的校验方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |