数据处理方法、装置及系统的制作方法

文档序号:6508197阅读:168来源:国知局
数据处理方法、装置及系统的制作方法
【专利摘要】本发明公开了一种数据处理方法、装置及系统,属于计算机【技术领域】。所述方法用于Redis的代理层中,包括:接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作;根据所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个;向确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理。所述装置包括:接收模块、确定模块和发送模块。本发明解决了缓存池将业务的数据缓存到硬盘中,再从硬盘中读取该数据造成的耗费时间较长、降低应用层对Redis中数据的处理效率的问题,达到了提高Redis中数据处理效率的效果。
【专利说明】数据处理方法、装置及系统
【技术领域】
[0001]本发明涉及计算机【技术领域】,特别涉及一种数据处理方法、装置及系统。
【背景技术】
[0002]Redis是一个开源、支持网络、基于内存的键值对存储数据库。Redis支持存储的数据类型较多,包括string(字符串)、list (链表)、set (集合)、zset (有序集合)和hashs(哈希类型),这些数据类型都支持push (入栈)/pop (出栈)、add (增加)/remove (删除)、取交集、并集和差集及更丰富的操作。应用层可以发送对应于上述操作的操作指令,以便Redis接收到该操作指令后,对Redis中数据的进行处理,该操作指令用于指示对数据进行操作。
[0003]在对Redis中的数据进行处理时,为了避免应用层对Redis进行操作造成的增加应用层的业务复杂性的问题,可以预先设置Redis的代理层,通过代理层接收并处理应用层发送的操作指令。比如,代理层可以配置两个缓存池,每个缓存池包括3个相互独立的serveK服务器)且每个server都负责读写数据,并为这两个缓存池分别设置两个端口。由于一个缓存池对应于一项业务,因此,应用层可以根据业务需求向代理层发送携带端口号的操作指令,该业务可以是新闻网站等。代理层接收到携带有端口号的操作指令后,确定与该端口号对应的缓存池中的一个server,将操作指令发送给该选定的server,由该server根据该操作指令对Redis中的数据进行处理。
[0004]基于缓存容量的限制,缓存池中的server需要将过期数据缓存到硬盘中,以便在该过期数据的存储空间中加载读写频率较高的热数据。若应用层需要读写该过期数据,则server需要将该过期数据从硬盘中加载到server中,再对server中重新加载的该过期数据进行读写操作。由于从硬盘中加载数据所耗费的时间较长,降低了应用层对Redis中数据的处理效率。

【发明内容】

[0005]为了解决缓存池将业务的数据缓存到硬盘中,再从硬盘中读取该数据造成的耗费时间较长、降低应用层对Redis中数据的处理效率的问题,本发明实施例提供了一种数据处理方法、装置及系统。所述技术方案如下:
[0006]第一方面,本发明实施例提供了一种数据处理方法,用于Redis的代理层中,所述方法包括:
[0007]接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作;
[0008]根据所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个;
[0009]向确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理。
[0010]第二方面,本发明实施例提供了一种数据处理装置,用于Redis的代理层中,所述装置包括:
[0011]接收模块,用于接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作;
[0012]确定模块,用于根据所述接收模块接收到的所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个;
[0013]发送模块,用于向所述确定模块确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理。
[0014]第三方面,本发明实施例提供了一种Redis的代理层,所述代理层包括如第二方面所述的数据处理装置。
[0015]第四方面,本发明实施例提供了一种数据处理系统,所述系统包括:应用层、如第三方面所述的Redis的代理层和至少一个命名空间,所述命名空间用于缓存一项业务的所有数据;
[0016]所述命名空间包括至少一个分片,所述分片包括一个Master和至少两个Slave,所述Master和所述Slave为Redis中数据的存储单元;
[0017]对于每一个分片,所述Master的一端连接第一 Slave的一端,所述第一 Slave的另一端连接剩余Slave的一端,所述剩余Slave的一端为一个第二 Slave的一端或N个第二 Slave两两串联形成的串联Slave的一端,所述第一 Slave为连接所述Master的Slave,所述第二 Slave为未连接所述Master的Slave, N≥2。
[0018]通过接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作;根据所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个;向确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理,可以在命名空间中缓存一项业务的所有数据,而不需要将业务的数据缓存到硬盘中,使得代理层可以直接从命名空间中获取业务的所有数据,解决了缓存池将业务的数据缓存到硬盘中,再从硬盘中读取该数据造成的耗费时间较长、降低应用层对Redis中数据的处理效率的问题,达到了提高Redis中数据处理效率的效果O
【专利附图】

【附图说明】
[0019]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0020]图1是本发明一个实施例提供的数据处理方法的方法流程图;
[0021]图2是本发明另一实施例提供的数据处理方法的方法流程图;
[0022]图3是本发明一个实施例提供的数据处理装置的结构框架图;
[0023]图4是本发明再一实施例提供的数据处理装置的结构框架图;
[0024]图5是本发明一个实施例提供的Redis的代理层的结构框架图;
[0025]图6是本发明一个实施例提供的数据处理系统的结构框架图。【具体实施方式】
[0026]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0027]请参考图1,其示出了本发明一个实施例提供的数据处理方法的方法流程图,该数据处理方法可以应用于Redis中。该数据处理方法,包括:
[0028]步骤101,代理层接收应用层发送的操作指令,该操作指令用于指示对数据进行操作;
[0029]应用层用于获取用户发出的操作指令,根据该操作指令操作Redis中的数据。为了避免应用层操作Redis中的数据造成的增加应用层的业务复杂性的问题,可以在应用层与Redis之间设置代理层,该代理层用于代理应用层与Redis交互。当需要对Redis中的数据进行操作时,用户可以通过应用层发出操作指令,代理层接收应用层发送的操作指令,并对该操作指令进行处理。
[0030]其中,操作指令用来指示对Redis中的数据进行操作,比如,该操作指令可以是读指令,用于指示从Redis中读出数据;该操作指令可以是写指令,用于指示将数据写入Redis0
[0031 ] 步骤102,代理层根据操作指令确定该数据所属的命名空间,该命名空间用于缓存一项业务的所有数据且命名空间至少为一个;
[0032]为了避免Redis中数据标识相同造成的读写错误的问题,代理层可以为Redis设置命名空间,将数据标识相同的数据缓存在不同的命名空间中,以便根据命名空间来区分数据。其中,命名空间至少为一个。
[0033]为了便于对应用层发起的业务进行管理,代理层通常为一项业务设置一个命名空间,该命名空间用于缓存该业务的所有数据。当代理层接收到操作指令时,可以根据该操作指令确定该业务对应的命名空间,再根据确定出的命名空间进行数据处理。
[0034]步骤103,代理层向确定的命名空间发送操作指令,由该命名空间根据操作指令对数据进行处理。
[0035]代理层可以将操作指令发送给确定出的命名空间,以便命名空间接收到该操作指令后,根据该操作指令进行数据处理。比如,若操作指令为读指令,则命名空间可以在自身的缓存中查找操作指令所指示的数据,将该数据发送给代理层,由代理层将该数据发送给应用层;若操作指令为写指令,则命名空间可以将操作指令所指示的数据写入自身的缓存中。
[0036]综上所述,本发明实施例提供的数据处理方法,通过接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作;根据所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个;向确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理,可以在命名空间中缓存一项业务的所有数据,而不需要将业务的数据缓存到硬盘中,使得代理层可以直接从命名空间中获取业务的所有数据,解决了缓存池将业务的数据缓存到硬盘中,再从硬盘中读取该数据造成的耗费时间较长、降低应用层对Redis中数据的处理效率的问题,解决了将数据存储在数据库DB等结构,部分存储于redis等缓存,以缓存-硬盘的层级访问造成的效率问题,达到了提高Redis中数据处理效率的效果。redis拥有全量数据,不会向DB渗透请求,提高效率;命名空间以及权限认证,保证业务间数据分离和安全;任意定制业务后端redis结构,负载均衡。可处理任意数据量(指存储数据总量大小,太大可加分片)和查询量(指请求量,如读负荷大可加从机)的业务;单点容灾。可避免停服。
[0037]请参考图2,其示出了本发明另一实施例提供的数据处理方法的方法流程图,该数据处理方法可以应用于Redis中。该数据处理方法,包括:
[0038]步骤201,代理层接收应用层发送的操作指令,该操作指令用于指示对数据进行操作;
[0039]应用层用于获取用户发出的操作指令,根据该操作指令操作Redis中的数据。为了避免应用层操作Redis中的数据造成的增加应用层的业务复杂性的问题,可以在应用层与Redis之间设置代理层,该代理层用于代理应用层与Redis交互。当需要对Redis中的数据进行操作时,用户可以通过应用层发出操作指令,代理层接收应用层发送的操作指令,并对该操作指令进行处理。
[0040]其中,操作指令用来指示对Redis中的数据进行操作,比如,该操作指令可以是读指令,用于指示从Redis中读出数据;该操作指令可以是写指令,用于指示将数据写入Redis0
[0041]步骤202,代理层根据业务的数据量在命名空间中配置至少一个分片,该分片包括一个Master和至少两个Slave且分片的数量与业务的数据量呈正相关关系,Master和Slave为Redis中数据的存储单元,该命名空间用于缓存一项业务的所有数据且命名空间至少为一个;
[0042]为了避免Redis中数据标识相同造成的读写数据出错的问题,代理层可以为Redis设置命名空间,将数据标识相同的数据缓存在不同的命名空间中,以便根据命名空间来区分数据。为了便于对应用层发起的业务进行管理,代理层通常为一项业务设置一个命名空间,该命名空间用于缓存该业务的所有数据。其中,命名空间至少为一个。
[0043]优选地,代理层可以在命名空间中设置Master和Slave的存储结构,Master和Slave为Redis中数据的存储单元且Master和Slave中的数据相同。其中,Master和Slave可以缓存业务的所有数据,而不需要将数据缓存至硬盘中,使得代理层可以直接从命名空间中获取业务的所有数据,解决了缓存池将业务的数据缓存到硬盘中,再从硬盘中读取该数据造成的耗费时间较长、降低应用层对Redis中数据的处理效率的问题,达到了提高Redis中数据处理效率的效果。
[0044]在通过Master和Slave缓存数据时,可以为Master和Slave配置读写策略,即配置Master处理写操作,配置Slave处理读操作。由于Master和Slave分别负责数据的读写操作,对数据的读写操作进行分离,避免了现有技术中Server同时负责读写操作造成的加重Server的负载,降低数据处理效率的问题。
[0045]由于Master和Slave结构可以缓存业务的所有数据,因此,当Master和Slave存储结构中缓存的数据量达到存储极限时,代理层需要为命名空间配置另外的Master和Slave存储结构。因此,代理层可以根据业务的数据量在命名空间中配置至少一个分片,该分片即为Master和Slave存储结构。比如,当业务的数据量较多时,代理层可以增加分片的数量;当业务的数据量较少时,代理层可以减少分片的数量。
[0046]步骤203,代理层对于每一个分片,设置Master的一端连接第一 Slave的一端,第一Slave的另一端连接剩余Slave的一端,剩余Slave的一端为一个第二 Slave的一端或N个第二 Slave两两串联形成的串联Slave的一端,第一 Slave为连接Master的Slave,第
二Slave 为未连接 Master 的 Slave, N ^ 2 ;
[0047]其中,代理层配置命名空间中的分片时,可以在该分片中设置一个Master和一个Slave,且Master的一端连接Slave的一端。由于Master和Slave串联,因此,Slave可以在与Master建立连接时与Master中的数据进行同步,在同步完成后,Master负责写入数据,Slave负责读出数据。若Master或Slave发生了故障,则该分片不能继续对数据进行处理,该分片处于失效状态。
[0048]为了避免分片中Master或Slave故障造成的分片失效的问题,代理层可以在分片中设置一个Master和至少两个Slave,通过设置分片中Master和Slave的读写策略实现分片的容灾功能。
[0049]首先,代理层需要对分片中Master和Slave的存储结构进行设置:
[0050]若分片中包括两个Slave,则可以将Master的一端连接第一 Slave的一端,第一Slave的另一端连接第二 Slave的一端,第一 Slave为连接Master的Slave,第二 Slave为未连接 Master 的 Slave。比如:分片为 Master-〉第一 Slave-〉第二 Slave ;
[0051 ] 若分片中包括至少三个Slave,则可以将Master的一端连接第一 Slave的一端,第一 Slave的另一端连接剩余Slave的一端,剩余Slave的一端为N个第二 Slave两两串联形成的串联Slave的一端,第一 Slave为连接Master的Slave,第二 Slave为未连接Master的 Slave, N ^ 2o 比如,N=3,则分片为 Master-〉第一 Slave-〉第二 Slave-〉第二 Slave。
[0052]由于Slave需要 与Master中的数据进行同步,因此,若第二 Slave的数量较多,会导致数据同步时间较长,降低了数据处理效率。通常,分片中可以包括一个或两个第二Slave。
[0053]基于代理层在分片中设置的Master和Slave的存储结构,代理层可以设置特定的读写策略,使得分片中Master或Slave发生故障时,分片仍然可以对数据进行处理。具体读写策略如下:
[0054]若Master、第一 Slave和第二 Slave均处于有效状态,则可以配置Master处理写操作,第一 Slave和第二 Slave处理读操作;
[0055]若Master处于失效状态、第一 Slave和第二 Slave处于有效状态,则可以配置第一 Slave处理写操作,第二 Slave处理读操作;
[0056]若第一 Slave处于失效状态,Master处于有效状态,则可以配置Master处理写操作和读操作;
[0057]若第二 Slave处于失效状态,则可以配置Master处理写操作,第一 Slave处理读操作。
[0058]需要补充说明的是,步骤202和步骤203也可以在步骤201之前执行,本实施例不限定步骤202和步骤203与步骤201的执行顺序。
[0059]步骤204,代理层根据操作指令确定该数据所属的命名空间;
[0060]代理层可以对命名空间设置认证信息,实现了对应用层的访问进行限制,提高了数据的安全性。本实施例中,根据操作指令确定数据所属的命名空间,可以包括:
[0061]获取操作指令中携带的Auth命令;[0062]在预设的所有命名空间的认证信息中,查找与Auth命令匹配的认证信息;
[0063]将与查找到的认证信息对应的命名空间确定为数据所属的命名空间。
[0064]其中,应用层可以在操作指令中携带Auth命令,该Auth命令可以是密码等。代理层在获取到操作指令中携带的Auth命令后,可以在预先为所有命名空间设置的认证信息中查找与该Auth命令匹配的认证信息,若查找到与Auth命令匹配的命名空间,则将该命名空间确定为操作指令中的数据所属的命名空间;若未查找到与Auth命令匹配的命名空间,则返回认证失败的信息,可以提示用户再次输入Auth命令或结束数据处理流程。
[0065]比如,可以预先在配置文件中设置某一个命名空间的认证信息为“1234”,若代理层获取到的Auth命令为“ 1234”,则可以确定该命名空间为与该Auth命令对应的命名空间。
[0066]实际应用中,认证命名空间可以通过以下代码实现:
[0067]一、确定命令类型是否是Auth命令:
[0068]
【权利要求】
1.一种数据处理方法,其特征在于,用于Redis的代理层中,所述方法包括: 接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作; 根据所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个; 向确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理。
2.根据权利要求1所述的数据处理方法,其特征在于,所述方法还包括: 根据所述业务的数据量在所述命名空间中配置至少一个分片,所述分片包括一个Master和至少两个Slave且所述分片的数量与所述业务的数据量呈正相关关系,所述Master和所述Slave为所述Redis中数据的存储单元; 对于每一个分片,设置所述Master的一端连接第一 Slave的一端,所述第一 Slave的另一端连接剩余Slave的一端,所述剩余Slave的一端为一个第二 Slave的一端或N个第二 Slave两两串联形成的串联Slave的一端,所述第一 Slave为连接所述Master的Slave,所述第二 Slave为未连接所述Master的Slave, N≥2。
3.根据权利要求2所述的数据处理方法,其特征在于,所述向确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理,包括: 根据所述操作指令确定所述命名空间中所述数据所属的分片; 根据所述操作指令确定所述分片中所述数据所属的Redis实例,所述Redis实例为所述Master或所述第一 Slave或所述第二 Slave ; 向所述Redis实例发送所述操作指令,由所述Redis实例根据所述操作指令对所述数据进行处理。
4.根据权利要求3所述的数据处理方法,其特征在于,所述根据所述操作指令确定所述分片中所述数据所属的Redis实例,包括: 当所述Master处于失效状态时,若所述操作指令为读指令,则确定所述数据所属的Redis实例为所述第二 Slave ;若所述操作指令为写指令,则确定所述数据所属的Redis实例为所述第一 Slave ; 当所述第一 Slave处于失效状态时,确定所述数据所属的Redis实例为所述Master ;当所述Master和所述第一 Slave均处于有效状态时,若所述操作指令为读指令,则确定所述数据所属的Redis实例为所述第一 Slave或所述第二 Slave ;若所述操作指令为写指令,则确定所述数据所属的Redis实例为所述Master。
5.根据权利要求3所述的数据处理方法,其特征在于,所述根据所述操作指令确定所述命名空间中所述数据所属的分片,包括: 获取所述操作指令中携带的键值; 根据预先配置的哈希算法计算所述键值的哈希值; 对所述哈希值进行取模运算,得到所述哈希值的余数; 在预设的所述命名空间的所有分片标识中,查找与所述余数相同的分片标识; 将查找到的所述分片标识所指示的分片确定为所述数据所属的分片。
6.根据权利要求1至5任一所述的数据处理方法,其特征在于,所述根据所述操作指令确定所述数据所属的命名空间,包括:获取所述操作指令中携带的认证Auth命令; 在预设的所有命名空间的认证信息中,查找与所述Auth命令匹配的认证信息; 将与查找到的所述认证信息对应的命名空间确定为所述数据所属的命名空间。
7.一种数据处理装置,其特征在于,用于Redis的代理层中,所述装置包括: 接收模块,用于接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作; 确定模块,用于根据所述接收模块接收到的所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个; 发送模块,用于向所述确定模块确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理。
8.根据权利要求7所述的数据处理装置,其特征在于,所述装置还包括: 配置模块,用于根据所述业务的数据量在所述命名空间中配置至少一个分片,所述分片包括一个Master和至少两个Slave且所述分片的数量与所述业务的数据量呈正相关关系,所述Master和所述Slave为所述Redis中数据的存储单元; 设置模块,用于对于所述配置模块配置的每一个分片,设置所述Master的一端连接第一Slave的一端,所述第一 Slave的另一端连接剩余Slave的一端,所述剩余Slave的一端为一个第二 Slave的一端或N个第二 Slave两两串联形成的串联Slave的一端,所述第一Slave为连接所述Master 的Slave,所述第二 Slave为未连接所述Master的Slave, N ^ 2。
9.根据权利要求8所述的数据处理装置,其特征在于,所述发送模块,包括: 第一确定单元,用于根据所述操作指令确定所述命名空间中所述数据所属的分片; 第二确定单元,用于根据所述操作指令确定所述第一确定单元确定的所述分片中所述数据所属的Redis实例,所述Redis实例为所述Master或所述第一 Slave或所述第二Slave ; 发送单元,用于向所述第二确定单元确定的所述Redis实例发送所述操作指令,由所述Redis实例根据所述操作指令对所述数据进行处理。
10.根据权利要求9所述的数据处理装置,其特征在于,所述第二确定单元,包括: 第一确定子单元,用于当所述Master处于失效状态时,若所述操作指令为读指令,则确定所述数据所属的Redis实例为所述第二 Slave ;若所述操作指令为写指令,则确定所述数据所属的Redis实例为所述第一 Slave ; 第二确定子单元,用于当所述第一 Slave处于失效状态时,确定所述数据所属的Redis实例为所述Master ; 第三确定子单元,用于当所述Master和所述第一 Slave均处于有效状态时,若所述操作指令为读指令,则确定所述数据所属的Redis实例为所述第一 Slave或所述第二 Slave ;若所述操作指令为写指令,则确定所述数据所属的Redis实例为所述Master。
11.根据权利要求9所述的数据处理装置,其特征在于,所述第一确定单元,包括: 获取子单元,用于获取所述操作指令中携带的键值; 第一计算子单元,用于根据预先配置的哈希算法计算所述获取子单元获取到的所述键值的哈希值; 第二计算子单元,用于对所述第一计算子单元计算得到的所述哈希值进行取模运算,得到所述哈希值的余数; 查找子单元,用于在预设的所述命名空间的所有分片标识中,查找与所述第二计算子单元计算得到的所述余数相同的分片标识; 第四确定子单元,用于将所述查找子单元查找到的所述分片标识所指示的分片确定为所述数据所属的分片。
12.根据权利要求7至11任一所述的数据处理装置,其特征在于,所述确定模块,包括: 获取单元,用于获取所述操作指令中携带的认证Auth命令; 查找单元,用于在预设的所有命名空间的认证信息中,查找与所述获取单元获取到的所述Auth命令匹配的认证信息; 第三确定单元,用于将与所述查找单元查找到的所述认证信息对应的命名空间确定为所述数据所属的命名空间。
13.一种Redis的代理层,其特征在于,所述代理层包括如权利要求7至12任一所述的数据处理装置。
14.一种数据处理系统,其特征在于,所述系统包括:应用层、如权利要求13所述的Redis的代理层和至少一个命名空间,所述命名空间用于缓存一项业务的所有数据; 所述命名空间包括至少一个分片,所述分片包括一个Master和至少两个Slave,所述Master和所述Slave为Redis中数据的存储单元; 对于每一个分片,所述Master的一端连接第一 Slave的一端,所述第一 Slave的另一端连接剩余Slave的一端,所述剩余Slave的一端为一个第二 Slave的一端或N个第二Slave两两串联形成的串联Slave的一端,所述第一 Slave为连接所述Master的Slave,所述第二 Slave为未连接所述Master的Slave, N > 2。
【文档编号】G06F17/30GK103473272SQ201310364464
【公开日】2013年12月25日 申请日期:2013年8月20日 优先权日:2013年8月20日
【发明者】彭睿, 王海洲, 韩祝鹏, 姚聪 申请人:小米科技有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1