CN103473272B - 数据处理方法、装置及*** - Google Patents

数据处理方法、装置及*** Download PDF

Info

Publication number
CN103473272B
CN103473272B CN201310364464.6A CN201310364464A CN103473272B CN 103473272 B CN103473272 B CN 103473272B CN 201310364464 A CN201310364464 A CN 201310364464A CN 103473272 B CN103473272 B CN 103473272B
Authority
CN
China
Prior art keywords
data
slave
operational order
namespace
redis
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.)
Active
Application number
CN201310364464.6A
Other languages
English (en)
Other versions
CN103473272A (zh
Inventor
彭睿
王海洲
韩祝鹏
姚聪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xiaomi Inc
Original Assignee
Xiaomi Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xiaomi Inc filed Critical Xiaomi Inc
Priority to CN201310364464.6A priority Critical patent/CN103473272B/zh
Publication of CN103473272A publication Critical patent/CN103473272A/zh
Application granted granted Critical
Publication of CN103473272B publication Critical patent/CN103473272B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种数据处理方法、装置及***,属于计算机技术领域。所述方法用于Redis的代理层中,包括:接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作;根据所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个;向确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理。所述装置包括:接收模块、确定模块和发送模块。本发明解决了缓存池将业务的数据缓存到硬盘中,再从硬盘中读取该数据造成的耗费时间较长、降低应用层对Redis中数据的处理效率的问题,达到了提高Redis中数据处理效率的效果。

Description

数据处理方法、装置及***
技术领域
本发明涉及计算机技术领域,特别涉及一种数据处理方法、装置及***。
背景技术
Redis是一个开源、支持网络、基于内存的键值对存储数据库。Redis支持存储的数据类型较多,包括string(字符串)、list(链表)、set(集合)、zset(有序集合)和hashs(哈希类型),这些数据类型都支持push(入栈)/pop(出栈)、add(增加)/remove(删除)、取交集、并集和差集及更丰富的操作。应用层可以发送对应于上述操作的操作指令,以便Redis接收到该操作指令后,对Redis中数据的进行处理,该操作指令用于指示对数据进行操作。
在对Redis中的数据进行处理时,为了避免应用层对Redis进行操作造成的增加应用层的业务复杂性的问题,可以预先设置Redis的代理层,通过代理层接收并处理应用层发送的操作指令。比如,代理层可以配置两个缓存池,每个缓存池包括3个相互独立的server(服务器)且每个server都负责读写数据,并为这两个缓存池分别设置两个端口。由于一个缓存池对应于一项业务,因此,应用层可以根据业务需求向代理层发送携带端口号的操作指令,该业务可以是新闻网站等。代理层接收到携带有端口号的操作指令后,确定与该端口号对应的缓存池中的一个server,将操作指令发送给该选定的server,由该server根据该操作指令对Redis中的数据进行处理。
基于缓存容量的限制,缓存池中的server需要将过期数据缓存到硬盘中,以便在该过期数据的存储空间中加载读写频率较高的热数据。若应用层需要读写该过期数据,则server需要将该过期数据从硬盘中加载到server中,再对server中重新加载的该过期数据进行读写操作。由于从硬盘中加载数据所耗费的时间较长,降低了应用层对Redis中数据的处理效率。
发明内容
为了解决缓存池将业务的数据缓存到硬盘中,再从硬盘中读取该数据造成的耗费时间较长、降低应用层对Redis中数据的处理效率的问题,本发明实施例提供了一种数据处理方法、装置及***。所述技术方案如下:
第一方面,本发明实施例提供了一种数据处理方法,用于Redis的代理层中,所述方法包括:
接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作;
根据所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个,数据标识相同的数据缓存在不同的所述命名空间中;
向确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理。
第二方面,本发明实施例提供了一种数据处理装置,用于Redis的代理层中,所述装置包括:
接收模块,用于接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作;
确定模块,用于根据所述接收模块接收到的所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个,数据标识相同的数据缓存在不同的所述命名空间中;
发送模块,用于向所述确定模块确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理。
第三方面,本发明实施例提供了一种Redis的代理层,所述代理层包括如第二方面所述的数据处理装置。
第四方面,本发明实施例提供了一种数据处理***,所述***包括:应用层、如第三方面所述的Redis的代理层和至少一个命名空间,所述命名空间用于缓存一项业务的所有数据;
所述命名空间包括至少一个分片,所述分片包括一个Master和至少两个Slave,所述Master和所述Slave为Redis中数据的存储单元;
对于每一个分片,所述Master的一端连接第一Slave的一端,所述第一Slave的另一端连接剩余Slave的一端,所述剩余Slave的一端为一个第二Slave的一端或N个第二Slave两两串联形成的串联Slave的一端,所述第一Slave为连接所述Master的Slave,所述第二Slave为未连接所述Master的Slave,N≥2。
通过接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作;根据所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个;向确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理,可以在命名空间中缓存一项业务的所有数据,而不需要将业务的数据缓存到硬盘中,使得代理层可以直接从命名空间中获取业务的所有数据,解决了缓存池将业务的数据缓存到硬盘中,再从硬盘中读取该数据造成的耗费时间较长、降低应用层对Redis中数据的处理效率的问题,达到了提高Redis中数据处理效率的效果。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例提供的数据处理方法的方法流程图;
图2是本发明另一实施例提供的数据处理方法的方法流程图;
图3是本发明一个实施例提供的数据处理装置的结构框架图;
图4是本发明再一实施例提供的数据处理装置的结构框架图;
图5是本发明一个实施例提供的Redis的代理层的结构框架图;
图6是本发明一个实施例提供的数据处理***的结构框架图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
请参考图1,其示出了本发明一个实施例提供的数据处理方法的方法流程图,该数据处理方法可以应用于Redis中。该数据处理方法,包括:
步骤101,代理层接收应用层发送的操作指令,该操作指令用于指示对数据进行操作;
应用层用于获取用户发出的操作指令,根据该操作指令操作Redis中的数据。为了避免应用层操作Redis中的数据造成的增加应用层的业务复杂性的问题,可以在应用层与Redis之间设置代理层,该代理层用于代理应用层与Redis交互。当需要对Redis中的数据进行操作时,用户可以通过应用层发出操作指令,代理层接收应用层发送的操作指令,并对该操作指令进行处理。
其中,操作指令用来指示对Redis中的数据进行操作,比如,该操作指令可以是读指令,用于指示从Redis中读出数据;该操作指令可以是写指令,用于指示将数据写入Redis。
步骤102,代理层根据操作指令确定该数据所属的命名空间,该命名空间用于缓存一项业务的所有数据且命名空间至少为一个;
为了避免Redis中数据标识相同造成的读写错误的问题,代理层可以为Redis设置命名空间,将数据标识相同的数据缓存在不同的命名空间中,以便根据命名空间来区分数据。其中,命名空间至少为一个。
为了便于对应用层发起的业务进行管理,代理层通常为一项业务设置一个命名空间,该命名空间用于缓存该业务的所有数据。当代理层接收到操作指令时,可以根据该操作指令确定该业务对应的命名空间,再根据确定出的命名空间进行数据处理。
步骤103,代理层向确定的命名空间发送操作指令,由该命名空间根据操作指令对数据进行处理。
代理层可以将操作指令发送给确定出的命名空间,以便命名空间接收到该操作指令后,根据该操作指令进行数据处理。比如,若操作指令为读指令,则命名空间可以在自身的缓存中查找操作指令所指示的数据,将该数据发送给代理层,由代理层将该数据发送给应用层;若操作指令为写指令,则命名空间可以将操作指令所指示的数据写入自身的缓存中。
综上所述,本发明实施例提供的数据处理方法,通过接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作;根据所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个;向确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理,可以在命名空间中缓存一项业务的所有数据,而不需要将业务的数据缓存到硬盘中,使得代理层可以直接从命名空间中获取业务的所有数据,解决了缓存池将业务的数据缓存到硬盘中,再从硬盘中读取该数据造成的耗费时间较长、降低应用层对Redis中数据的处理效率的问题,解决了将数据存储在数据库DB等结构,部分存储于redis等缓存,以缓存-硬盘的层级访问造成的效率问题,达到了提高Redis中数据处理效率的效果。redis拥有全量数据,不会向DB渗透请求,提高效率;命名空间以及权限认证,保证业务间数据分离和安全;任意定制业务后端redis结构,负载均衡。可处理任意数据量(指存储数据总量大小,太大可加分片)和查询量(指请求量,如读负荷大可加从机)的业务;单点容灾。可避免停服。
请参考图2,其示出了本发明另一实施例提供的数据处理方法的方法流程图,该数据处理方法可以应用于Redis中。该数据处理方法,包括:
步骤201,代理层接收应用层发送的操作指令,该操作指令用于指示对数据进行操作;
应用层用于获取用户发出的操作指令,根据该操作指令操作Redis中的数据。为了避免应用层操作Redis中的数据造成的增加应用层的业务复杂性的问题,可以在应用层与Redis之间设置代理层,该代理层用于代理应用层与Redis交互。当需要对Redis中的数据进行操作时,用户可以通过应用层发出操作指令,代理层接收应用层发送的操作指令,并对该操作指令进行处理。
其中,操作指令用来指示对Redis中的数据进行操作,比如,该操作指令可以是读指令,用于指示从Redis中读出数据;该操作指令可以是写指令,用于指示将数据写入Redis。
步骤202,代理层根据业务的数据量在命名空间中配置至少一个分片,该分片包括一个Master和至少两个Slave且分片的数量与业务的数据量呈正相关关系,Master和Slave为Redis中数据的存储单元,该命名空间用于缓存一项业务的所有数据且命名空间至少为一个;
为了避免Redis中数据标识相同造成的读写数据出错的问题,代理层可以为Redis设置命名空间,将数据标识相同的数据缓存在不同的命名空间中,以便根据命名空间来区分数据。为了便于对应用层发起的业务进行管理,代理层通常为一项业务设置一个命名空间,该命名空间用于缓存该业务的所有数据。其中,命名空间至少为一个。
优选地,代理层可以在命名空间中设置Master和Slave的存储结构,Master和Slave为Redis中数据的存储单元且Master和Slave中的数据相同。其中,Master和Slave可以缓存业务的所有数据,而不需要将数据缓存至硬盘中,使得代理层可以直接从命名空间中获取业务的所有数据,解决了缓存池将业务的数据缓存到硬盘中,再从硬盘中读取该数据造成的耗费时间较长、降低应用层对Redis中数据的处理效率的问题,达到了提高Redis中数据处理效率的效果。
在通过Master和Slave缓存数据时,可以为Master和Slave配置读写策略,即配置Master处理写操作,配置Slave处理读操作。由于Master和Slave分别负责数据的读写操作,对数据的读写操作进行分离,避免了现有技术中Server同时负责读写操作造成的加重Server的负载,降低数据处理效率的问题。
由于Master和Slave结构可以缓存业务的所有数据,因此,当Master和Slave存储结构中缓存的数据量达到存储极限时,代理层需要为命名空间配置另外的Master和Slave存储结构。因此,代理层可以根据业务的数据量在命名空间中配置至少一个分片,该分片即为Master和Slave存储结构。比如,当业务的数据量较多时,代理层可以增加分片的数量;当业务的数据量较少时,代理层可以减少分片的数量。
步骤203,代理层对于每一个分片,设置Master的一端连接第一Slave的一端,第一Slave的另一端连接剩余Slave的一端,剩余Slave的一端为一个第二Slave的一端或N个第二Slave两两串联形成的串联Slave的一端,第一Slave为连接Master的Slave,第二Slave为未连接Master的Slave,N≥2;
其中,代理层配置命名空间中的分片时,可以在该分片中设置一个Master和一个Slave,且Master的一端连接Slave的一端。由于Master和Slave串联,因此,Slave可以在与Master建立连接时与Master中的数据进行同步,在同步完成后,Master负责写入数据,Slave负责读出数据。若Master或Slave发生了故障,则该分片不能继续对数据进行处理,该分片处于失效状态。
为了避免分片中Master或Slave故障造成的分片失效的问题,代理层可以在分片中设置一个Master和至少两个Slave,通过设置分片中Master和Slave的读写策略实现分片的容灾功能。
首先,代理层需要对分片中Master和Slave的存储结构进行设置:
若分片中包括两个Slave,则可以将Master的一端连接第一Slave的一端,第一Slave的另一端连接第二Slave的一端,第一Slave为连接Master的Slave,第二Slave为未连接Master的Slave。比如:分片为Master->第一Slave->第二Slave;
若分片中包括至少三个Slave,则可以将Master的一端连接第一Slave的一端,第一Slave的另一端连接剩余Slave的一端,剩余Slave的一端为N个第二Slave两两串联形成的串联Slave的一端,第一Slave为连接Master的Slave,第二Slave为未连接Master的Slave,N≥2。比如,N=3,则分片为Master->第一Slave->第二Slave->第二Slave。
由于Slave需要与Master中的数据进行同步,因此,若第二Slave的数量较多,会导致数据同步时间较长,降低了数据处理效率。通常,分片中可以包括一个或两个第二Slave。
基于代理层在分片中设置的Master和Slave的存储结构,代理层可以设置特定的读写策略,使得分片中Master或Slave发生故障时,分片仍然可以对数据进行处理。具体读写策略如下:
若Master、第一Slave和第二Slave均处于有效状态,则可以配置Master处理写操作,第一Slave和第二Slave处理读操作;
若Master处于失效状态、第一Slave和第二Slave处于有效状态,则可以配置第一Slave处理写操作,第二Slave处理读操作;
若第一Slave处于失效状态,Master处于有效状态,则可以配置Master处理写操作和读操作;
若第二Slave处于失效状态,则可以配置Master处理写操作,第一Slave处理读操作。
需要补充说明的是,步骤202和步骤203也可以在步骤201之前执行,本实施例不限定步骤202和步骤203与步骤201的执行顺序。
步骤204,代理层根据操作指令确定该数据所属的命名空间;
代理层可以对命名空间设置认证信息,实现了对应用层的访问进行限制,提高了数据的安全性。本实施例中,根据操作指令确定数据所属的命名空间,可以包括:
获取操作指令中携带的Auth命令;
在预设的所有命名空间的认证信息中,查找与Auth命令匹配的认证信息;
将与查找到的认证信息对应的命名空间确定为数据所属的命名空间。
其中,应用层可以在操作指令中携带Auth命令,该Auth命令可以是密码等。代理层在获取到操作指令中携带的Auth命令后,可以在预先为所有命名空间设置的认证信息中查找与该Auth命令匹配的认证信息,若查找到与Auth命令匹配的命名空间,则将该命名空间确定为操作指令中的数据所属的命名空间;若未查找到与Auth命令匹配的命名空间,则返回认证失败的信息,可以提示用户再次输入Auth命令或结束数据处理流程。
比如,可以预先在配置文件中设置某一个命名空间的认证信息为“1234”,若代理层获取到的Auth命令为“1234”,则可以确定该命名空间为与该Auth命令对应的命名空间。
实际应用中,认证命名空间可以通过以下代码实现:
一、确定命令类型是否是Auth命令:
二、存取Auth命令的密码:
三、验证密码有效的命名空间:
四、获取与Auth命令匹配的命名空间:
步骤205,代理层根据操作指令确定命名空间中数据所属的分片;
由于命名空间包括至少一个分片,且各个分片之间相互独立,因此,代理层还需要根据操作指令确定数据所属的分片,从而对该分片中的该数据进行处理。
本实施例中,根据操作指令确定命名空间中数据所属的分片,可以包括:
获取操作指令中携带的键值;
根据预先配置的哈希算法计算键值的哈希值;
对哈希值进行取模运算,得到哈希值的余数;
在预设的命名空间的所有分片标识中,查找与余数相同的分片标识;
将查找到的分片标识所指示的分片确定为数据所属的分片。
其中,代理层可以预先在命名空间中设置所有分片的分片标识,比如,1或2等。在代理层获取到键值后,可以根据预先配置的哈希算法和取模算法对键值进行计算,得到余数。代理层根据该余数查找分片标识,并将查找到的分片标识所指示的分片确定为数据所属的分片。比如,若计算得到的余数为1,则可以确定该数据属于分片标识为1的分片。
由于预先配置的哈希算法和取模算法相同,因此,相同的键值可以定位到相同的分片,实现多次对同一个分片中数据的处理。
实际应用中,代理层确定数据所在分片可以通过以下代码实现:
进一步地,本实施例还提供了一种哈希函数的具体实现:
步骤206,代理层根据操作指令确定分片中数据所属的Redis实例,该Redis实例为Master或第一Slave或第二Slave;
由于分片包括一个Master和至少两个Slave,因此,代理层还需要确定数据缓存在Master还是Slave中,即确定数据所属的Redis实例。该Redis实例为Master或第一Slave或第二Slave。
本实施例中,代理层可以获取分片中各个Redis实例的状态,根据操作指令的读写类型和Redis实例的状态确定数据所属的Redis实例。根据操作指令确定分片中数据所属的Redis实例,可以包括:
当Master处于失效状态时,若操作指令为读指令,则确定数据所属的Redis实例为第二Slave;若操作指令为写指令,则确定数据所属的Redis实例为第一Slave;
当第一Slave处于失效状态时,确定数据所属的Redis实例为Master;
当Master和第一Slave均处于有效状态时,若操作指令为读指令,则确定数据所属的Redis实例为第一Slave或第二Slave;若操作指令为写指令,则确定数据所属的Redis实例为Master。
优选地,当确定的Redis实例为多个时,代理层可以获取Redis实例处理数据的次数和/或处理数据的时间,选取处理数据的次数最少的Redis实例为最终的Redis实例,或,选取处理数据的时间距离当前时间最远的Redis实例为最终的Redis实例等,以实现Redis实例之间的负载均衡。
实际应用中,代理层确定Redis实例可以通过以下代码实现:
步骤207,代理层向Redis实例发送操作指令,由该Redis实例根据操作指令对数据进行处理。
代理层可以将操作指令发送给确定出的Redis实例,以便Redis实例接收到该操作指令后,根据该操作指令进行数据处理。比如,若操作指令为读指令,则Redis实例可以在自身的缓存中查找操作指令所指示的数据,将该数据发送给代理层,由代理层将该数据发送给应用层;若操作指令为写指令,则Redis实例可以将操作指令所指示的数据写入自身的缓存中。
需要补充说明的是,本实施例提供的代理层可以通过多种开发语言开发得到,因此,本实施例的代理层可以支持多种语言的客户端,扩大了代理层的适用范围。
综上所述,本发明实施例提供的数据处理方法,通过接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作;根据所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个;向确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理,可以在命名空间中缓存一项业务的所有数据,而不需要将业务的数据缓存到硬盘中,使得代理层可以直接从命名空间中获取业务的所有数据,解决了缓存池将业务的数据缓存到硬盘中,再从硬盘中读取该数据造成的耗费时间较长、降低应用层对Redis中数据的处理效率的问题,解决了将数据存储在数据库DB等结构,部分存储于redis等缓存,以缓存-硬盘的层级访问造成的效率问题,达到了提高Redis中数据处理效率的效果。redis拥有全量数据,不会向DB渗透请求,提高效率;命名空间以及权限认证,保证业务间数据分离和安全;任意定制业务后端redis结构,负载均衡。可处理任意数据量(指存储数据总量大小,太大可加分片)和查询量(指请求量,如读负荷大可加从机)的业务;单点容灾。可避免停服。另外,通过获取所述操作指令中携带的认证Auth命令;在预设的所有命名空间的认证信息中,查找与所述Auth命令匹配的认证信息;将与查找到的所述认证信息对应的命名空间确定为所述数据所属的命名空间,可以通过认证信息对应用层的访问进行限制,解决了不对应用层设置访问权限时,应用层可以访问所有业务造成的数据安全性低的问题,达到了提高Redis中数据的安全性的效果。
请参考图3,其示出了本发明一个实施例提供的数据处理装置的结构框架图,该数据处理装置可以应用于Redis中。该数据处理装置,包括:
接收模块310,用于接收应用层发送的操作指令,操作指令用于指示对数据进行操作;
确定模块320,用于根据接收模块310接收到的操作指令确定数据所属的命名空间,命名空间用于缓存一项业务的所有数据且命名空间至少为一个;
发送模块330,用于向确定模块320确定的命名空间发送操作指令,由命名空间根据操作指令对数据进行处理。
综上所述,本发明实施例提供的数据处理装置,通过接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作;根据所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个;向确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理,可以在命名空间中缓存一项业务的所有数据,而不需要将业务的数据缓存到硬盘中,使得代理层可以直接从命名空间中获取业务的所有数据,解决了缓存池将业务的数据缓存到硬盘中,再从硬盘中读取该数据造成的耗费时间较长、降低应用层对Redis中数据的处理效率的问题,解决了将数据存储在数据库DB等结构,部分存储于redis等缓存,以缓存-硬盘的层级访问造成的效率问题,达到了提高Redis中数据处理效率的效果。redis拥有全量数据,不会向DB渗透请求,提高效率;命名空间以及权限认证,保证业务间数据分离和安全;任意定制业务后端redis结构,负载均衡。可处理任意数据量(指存储数据总量大小,太大可加分片)和查询量(指请求量,如读负荷大可加从机)的业务;单点容灾。可避免停服。
请参考图4,其示出了本发明再一实施例提供的数据处理装置的结构框架图,该数据处理装置可以应用于Redis中。该数据处理装置,包括:接收模块310、确定模块320和发送模块330。
接收模块310,用于接收应用层发送的操作指令,操作指令用于指示对数据进行操作;
确定模块320,用于根据接收模块310接收到的操作指令确定数据所属的命名空间,命名空间用于缓存一项业务的所有数据且命名空间至少为一个;
发送模块330,用于向确定模块320确定的命名空间发送操作指令,由命名空间根据操作指令对数据进行处理。
进一步地,该装置还可以包括:
配置模块340,用于根据业务的数据量在命名空间中配置至少一个分片,分片包括一个Master和至少两个Slave且分片的数量与业务的数据量呈正相关关系,Master和Slave为Redis中数据的存储单元;
设置模块350,用于对于配置模块340配置的每一个分片,设置Master的一端连接第一Slave的一端,第一Slave的另一端连接剩余Slave的一端,剩余Slave的一端为一个第二Slave的一端或N个第二Slave两两串联形成的串联Slave的一端,第一Slave为连接Master的Slave,第二Slave为未连接Master的Slave,N≥2。
优选地,发送模块330,可以包括:
第一确定单元331,用于根据操作指令确定命名空间中数据所属的分片;
第二确定单元332,用于根据操作指令确定第一确定单元331确定的分片中数据所属的Redis实例,Redis实例为Master或第一Slave或第二Slave;
发送单元333,用于向第二确定单元332确定的Redis实例发送操作指令,由Redis实例根据操作指令对数据进行处理。
优选地,第二确定单元332,可以包括:
第一确定子单元332A,用于当Master处于失效状态时,若操作指令为读指令,则确定数据所属的Redis实例为第二Slave;若操作指令为写指令,则确定数据所属的Redis实例为第一Slave;
第二确定子单元332B,用于当第一Slave处于失效状态时,确定数据所属的Redis实例为Master;
第三确定子单元332C,用于当Master和第一Slave均处于有效状态时,若操作指令为读指令,则确定数据所属的Redis实例为第一Slave或第二Slave;若操作指令为写指令,则确定数据所属的Redis实例为Master。
优选地,第一确定单元331,可以包括:
获取子单元331A,用于获取操作指令中携带的键值;
第一计算子单元331B,用于根据预先配置的哈希算法计算获取子单元331A获取到的键值的哈希值;
第二计算子单元331C,用于对第一计算子单元331B计算得到的哈希值进行取模运算,得到哈希值的余数;
查找子单元331D,用于在预设的命名空间的所有分片标识中,查找与第二计算子单元331C计算得到的余数相同的分片标识;
第四确定子单元331E,用于将查找子单元331D查找到的分片标识所指示的分片确定为数据所属的分片。
优选地,确定模块320,可以包括:
获取单元321,用于获取操作指令中携带的认证Auth命令;
查找单元322,用于在预设的所有命名空间的认证信息中,查找与获取单元321获取到的Auth命令匹配的认证信息;
第三确定单元323,用于将与查找单元322查找到的认证信息对应的命名空间确定为数据所属的命名空间。
综上所述,本发明实施例提供的数据处理装置,通过接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作;根据所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个;向确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理,可以在命名空间中缓存一项业务的所有数据,而不需要将业务的数据缓存到硬盘中,使得代理层可以直接从命名空间中获取业务的所有数据,解决了缓存池将业务的数据缓存到硬盘中,再从硬盘中读取该数据造成的耗费时间较长、降低应用层对Redis中数据的处理效率的问题,解决了将数据存储在数据库DB等结构,部分存储于redis等缓存,以缓存-硬盘的层级访问造成的效率问题,达到了提高Redis中数据处理效率的效果。redis拥有全量数据,不会向DB渗透请求,提高效率;命名空间以及权限认证,保证业务间数据分离和安全;任意定制业务后端redis结构,负载均衡。可处理任意数据量(指存储数据总量大小,太大可加分片)和查询量(指请求量,如读负荷大可加从机)的业务;单点容灾。可避免停服。另外,通过获取所述操作指令中携带的认证Auth命令;在预设的所有命名空间的认证信息中,查找与所述Auth命令匹配的认证信息;将与查找到的所述认证信息对应的命名空间确定为所述数据所属的命名空间,可以通过认证信息对应用层的访问进行限制,解决了不对应用层设置访问权限时,应用层可以访问所有业务造成的数据安全性低的问题,达到了提高Redis中数据的安全性的效果。
请参考图5,其示出了本发明一个实施例提供的Redis的代理层的结构示意图。所述代理层500可以为服务器,所述代理层500包括中央处理单元(CPU)501、包括随机存取存储器(RAM)502和只读存储器(ROM)503的***存储器504,以及连接***存储器504和中央处理单元501的***总线505。所述代理层500还包括帮助计算机内的各个器件之间传输信息的基本输入/输出***(I/O***)506,和用于存储操作***513、应用程序514和其他程序模块515的大容量存储设备507。
所述基本输入/输出***506包括有用于显示信息的显示器508和用于用户输入信息的诸如鼠标、键盘之类的输入设备509。其中所述显示器508和输入设备509都通过连接到***总线505的输入输出控制器510连接到中央处理单元501。所述基本输入/输出***506还可以包括输入输出控制器510以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器510还提供输出到显示屏、打印机或其他类型的输出设备。
所述大容量存储设备507通过连接到***总线505的大容量存储控制器(未示出)连接到中央处理单元501。所述大容量存储设备507及其相关联的计算机可读介质为客户端设备500提供非易失性存储。也就是说,所述大容量存储设备507可以包括诸如硬盘或者CD-ROM驱动器之类的计算机可读介质(未示出)。
不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的***存储器504和大容量存储设备507可以统称为存储器。
根据本发明的各种实施例,所述代理层500还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即代理层500可以通过连接在所述***总线505上的网络接口单元511连接到网络512,或者说,也可以使用网络接口单元511来连接到其他类型的网络或远程计算机***(未示出)。
所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以***处理单元501执行所述一个或者一个以上程序包含用于执行图1所示实施例所提供的数据处理方法和图2所示实施例所提供的数据处理方法。
请参考图6,其示出了本发明一个实施例提供的数据处理***的结构框架图,该数据处理***可以应用于Redis中。该数据处理***,包括:应用层、Redis的代理层和至少一个命名空间;
其中,命名空间用于缓存一项业务的所有数据;命名空间可以包括至少一个分片,分片包括一个Master和至少两个Slave,Master和Slave为Redis中数据的存储单元;
对于每一个分片,Master的一端连接第一Slave的一端,第一Slave的另一端连接剩余Slave的一端,剩余Slave的一端为一个第二Slave的一端或N个第二Slave两两串联形成的串联Slave的一端,第一Slave为连接Master的Slave,第二Slave为未连接Master的Slave,N≥2。
其中,代理层可以包括如图3或图4所示的数据处理装置。
其中,图6中包括Q个命名空间,且分片中的M表示Master、S表示Slave。
综上所述,本发明实施例提供的数据处理***,通过接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作;根据所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个;向确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理,可以在命名空间中缓存一项业务的所有数据,而不需要将业务的数据缓存到硬盘中,使得代理层可以直接从命名空间中获取业务的所有数据,解决了缓存池将业务的数据缓存到硬盘中,再从硬盘中读取该数据造成的耗费时间较长、降低应用层对Redis中数据的处理效率的问题,解决了将数据存储在数据库DB等结构,部分存储于redis等缓存,以缓存-硬盘的层级访问造成的效率问题,达到了提高Redis中数据处理效率的效果。redis拥有全量数据,不会向DB渗透请求,提高效率;命名空间以及权限认证,保证业务间数据分离和安全;任意定制业务后端redis结构,负载均衡。可处理任意数据量(指存储数据总量大小,太大可加分片)和查询量(指请求量,如读负荷大可加从机)的业务;单点容灾。可避免停服。另外,通过获取所述操作指令中携带的认证Auth命令;在预设的所有命名空间的认证信息中,查找与所述Auth命令匹配的认证信息;将与查找到的所述认证信息对应的命名空间确定为所述数据所属的命名空间,可以通过认证信息对应用层的访问进行限制,解决了不对应用层设置访问权限时,应用层可以访问所有业务造成的数据安全性低的问题,达到了提高Redis中数据的安全性的效果。
需要说明的是:上述实施例提供的数据处理装置在进行数据处理时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将数据处理装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据处理装置与数据处理方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (12)

1.一种数据处理方法,其特征在于,用于Redis的代理层中,所述方法包括:
接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作;
根据所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个,所述命名空间包括至少一个分片,所述分片包括一个Master和至少两个Slave且所述分片的数量与所述业务的数据量呈正相关关系,所述Master和所述Slave为所述Redis中数据的存储单元;
向确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理;
其中,所述根据所述操作指令确定所述数据所属的命名空间,包括:确定所述操作指令中携带的命令的命令类型是否是认证Auth命令;若是,则存取所述Auth命令的密码;验证密码有效的命名空间;获取与所述Auth命令匹配的命名空间。
2.根据权利要求1所述的数据处理方法,其特征在于,所述方法还包括:
根据所述业务的数据量在所述命名空间中配置至少一个分片;
对于每一个分片,设置所述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.一种数据处理装置,其特征在于,用于Redis的代理层中,所述装置包括:
接收模块,用于接收应用层发送的操作指令,所述操作指令用于指示对数据进行操作;
确定模块,用于根据所述接收模块接收到的所述操作指令确定所述数据所属的命名空间,所述命名空间用于缓存一项业务的所有数据且所述命名空间至少为一个,所述命名空间包括至少一个分片,所述分片包括一个Master和至少两个Slave且所述分片的数量与所述业务的数据量呈正相关关系,所述Master和所述Slave为所述Redis中数据的存储单元;
发送模块,用于向所述确定模块确定的所述命名空间发送所述操作指令,由所述命名空间根据所述操作指令对所述数据进行处理;
其中,所述确定模块,还用于确定所述操作指令中携带的命令的命令类型是否是认证Auth命令;若是,则存取所述Auth命令的密码;验证密码有效的命名空间;获取与所述Auth命令匹配的命名空间。
7.根据权利要求6所述的数据处理装置,其特征在于,所述装置还包括:
配置模块,用于根据所述业务的数据量在所述命名空间中配置至少一个分片;
设置模块,用于对于所述配置模块配置的每一个分片,设置所述Master的一端连接第一Slave的一端,所述第一Slave的另一端连接剩余Slave的一端,所述剩余Slave的一端为一个第二Slave的一端或N个第二Slave两两串联形成的串联Slave的一端,所述第一Slave为连接所述Master的Slave,所述第二Slave为未连接所述Master的Slave,N≥2。
8.根据权利要求7所述的数据处理装置,其特征在于,所述发送模块,包括:
第一确定单元,用于根据所述操作指令确定所述命名空间中所述数据所属的分片;
第二确定单元,用于根据所述操作指令确定所述第一确定单元确定的所述分片中所述数据所属的Redis实例,所述Redis实例为所述Master或所述第一Slave或所述第二Slave;
发送单元,用于向所述第二确定单元确定的所述Redis实例发送所述操作指令,由所述Redis实例根据所述操作指令对所述数据进行处理。
9.根据权利要求8所述的数据处理装置,其特征在于,所述第二确定单元,包括:
第一确定子单元,用于当所述Master处于失效状态时,若所述操作指令为读指令,则确定所述数据所属的Redis实例为所述第二Slave;若所述操作指令为写指令,则确定所述数据所属的Redis实例为所述第一Slave;
第二确定子单元,用于当所述第一Slave处于失效状态时,确定所述数据所属的Redis实例为所述Master;
第三确定子单元,用于当所述Master和所述第一Slave均处于有效状态时,若所述操作指令为读指令,则确定所述数据所属的Redis实例为所述第一Slave或所述第二Slave;若所述操作指令为写指令,则确定所述数据所属的Redis实例为所述Master。
10.根据权利要求8所述的数据处理装置,其特征在于,所述第一确定单元,包括:
获取子单元,用于获取所述操作指令中携带的键值;
第一计算子单元,用于根据预先配置的哈希算法计算所述获取子单元获取到的所述键值的哈希值;
第二计算子单元,用于对所述第一计算子单元计算得到的所述哈希值进行取模运算,得到所述哈希值的余数;
查找子单元,用于在预设的所述命名空间的所有分片标识中,查找与所述第二计算子单元计算得到的所述余数相同的分片标识;
第四确定子单元,用于将所述查找子单元查找到的所述分片标识所指示的分片确定为所述数据所属的分片。
11.一种Redis的代理层,其特征在于,所述代理层包括如权利要求6至10任一所述的数据处理装置。
12.一种数据处理***,其特征在于,所述***包括:应用层、如权利要求11所述的Redis的代理层和至少一个命名空间,所述命名空间用于缓存一项业务的所有数据;
所述命名空间包括至少一个分片,所述分片包括一个Master和至少两个Slave且所述分片的数量与所述业务的数据量呈正相关关系,所述Master和所述Slave为Redis中数据的存储单元;
对于每一个分片,所述Master的一端连接第一Slave的一端,所述第一Slave的另一端连接剩余Slave的一端,所述剩余Slave的一端为一个第二Slave的一端或N个第二Slave两两串联形成的串联Slave的一端,所述第一Slave为连接所述Master的Slave,所述第二Slave为未连接所述Master的Slave,N≥2。
CN201310364464.6A 2013-08-20 2013-08-20 数据处理方法、装置及*** Active CN103473272B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310364464.6A CN103473272B (zh) 2013-08-20 2013-08-20 数据处理方法、装置及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310364464.6A CN103473272B (zh) 2013-08-20 2013-08-20 数据处理方法、装置及***

Publications (2)

Publication Number Publication Date
CN103473272A CN103473272A (zh) 2013-12-25
CN103473272B true CN103473272B (zh) 2017-06-16

Family

ID=49798120

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310364464.6A Active CN103473272B (zh) 2013-08-20 2013-08-20 数据处理方法、装置及***

Country Status (1)

Country Link
CN (1) CN103473272B (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104794172B (zh) * 2015-03-31 2018-09-11 北京奇艺世纪科技有限公司 一种数据处理方法和装置
CN105054963B (zh) * 2015-06-24 2019-02-05 青岛海信医疗设备股份有限公司 一种超声装置
CN105677251B (zh) * 2016-01-05 2018-12-21 上海瀚之友信息技术服务有限公司 基于Redis集群的存储***
CN105677468A (zh) * 2016-01-06 2016-06-15 北京京东尚科信息技术有限公司 缓存及其设计方法以及利用该缓存的调度方法和调度装置
CN107276912B (zh) * 2016-04-07 2021-08-27 华为技术有限公司 存储器、报文处理方法及分布式存储***
CN108319598B (zh) * 2017-01-16 2022-02-08 腾讯科技(北京)有限公司 数据缓存方法、装置和***
CN109150936A (zh) * 2017-06-19 2019-01-04 北京宝兰德软件股份有限公司 一种分布式集群中会话对象Session的共享方法及装置
CN107357853B (zh) * 2017-06-28 2020-12-08 广州华多网络科技有限公司 一种redis控制台的操作方法、装置及计算机***
CN107346258A (zh) * 2017-07-06 2017-11-14 北京微影时代科技有限公司 一种数据读写分离方法及装置
CN108491466B (zh) * 2018-03-06 2022-08-30 平安科技(深圳)有限公司 电子装置、访问指令信息获取方法及存储介质
CN110555041A (zh) * 2018-03-30 2019-12-10 腾讯科技(深圳)有限公司 数据处理方法、装置、计算机设备和存储介质
CN109783228A (zh) * 2018-12-14 2019-05-21 深圳壹账通智能科技有限公司 任务调度管理方法、装置、计算机***及可读存储***
CN109739843A (zh) * 2018-12-26 2019-05-10 篱笆墙网络科技有限公司 区块链数据读写方法、***、设备及存储介质
CN112162859A (zh) * 2020-09-24 2021-01-01 成都长城开发科技有限公司 数据处理方法、装置、计算机可读介质及电子设备
CN114489907B (zh) * 2022-01-29 2024-03-12 国泰新点软件股份有限公司 ***操作引导方法、设备及存储介质
CN117762906B (zh) * 2024-02-22 2024-05-03 北京凌云雀科技有限公司 一种基于Redis的冷热数据分离方法及***

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101075245A (zh) * 2007-06-14 2007-11-21 高建强 基于构件的数据存储方法及***
CN103049334A (zh) * 2012-12-14 2013-04-17 华为技术有限公司 一种任务处理的方法和虚拟机
CN103226598A (zh) * 2013-04-22 2013-07-31 华为技术有限公司 访问数据库的方法和装置以及数据库管理***

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8949270B2 (en) * 2011-03-10 2015-02-03 Salesforce.Com, Inc. Methods and systems for processing social media data

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101075245A (zh) * 2007-06-14 2007-11-21 高建强 基于构件的数据存储方法及***
CN103049334A (zh) * 2012-12-14 2013-04-17 华为技术有限公司 一种任务处理的方法和虚拟机
CN103226598A (zh) * 2013-04-22 2013-07-31 华为技术有限公司 访问数据库的方法和装置以及数据库管理***

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Redis在高速缓存***中的应用;曾超宇 等;《微型机与应用》;20130625;第32卷(第12期);11-13 *

Also Published As

Publication number Publication date
CN103473272A (zh) 2013-12-25

Similar Documents

Publication Publication Date Title
CN103473272B (zh) 数据处理方法、装置及***
US11296940B2 (en) Centralized configuration data in a distributed file system
US7926087B1 (en) Centralizing access request authorizations for storage systems
CN103401902A (zh) 一种便携式云存储***及方法
CN102857484A (zh) 一种实现单点登录的方法、***及装置
CN112153085A (zh) 一种数据处理方法、节点及区块链***
CN105025053A (zh) 基于云存储技术的分布式文件的上传方法及其***
US11675499B2 (en) Synchronous discovery logs in a fabric storage system
CN109684282A (zh) 一种构建元数据缓存的方法及装置
CN102982182B (zh) 一种数据存储规划方法及装置
CN107911249A (zh) 一种网络设备的命令行发送方法、装置和设备
CN104731635B (zh) 一种虚拟机访问控制方法,及虚拟机访问控制***
CN105187523B (zh) 一种目录访问方法及装置
CN105677904B (zh) 基于分布式文件***的小文件存储方法及装置
CN106598692A (zh) 在逻辑卷中创建镜像文件、虚拟机启动方法及服务器
CN101221485A (zh) 建立冗余磁盘阵列的方法及控制设备
CN109388614A (zh) 一种目录文件个数配额的方法、***及设备
CN106970958A (zh) 一种流文件的查询与存储方法和装置
CN108427728A (zh) 元数据的管理方法、设备及计算机可读介质
CN110134338A (zh) 一种分布式存储***及其数据冗余保护方法和相关设备
CN102945275B (zh) 文件碎片整理方法、装置及设备
CN105095103A (zh) 用于云环境下的存储设备管理方法和装置
US8589652B2 (en) Reorganization of a fragmented directory of a storage data structure comprised of the fragmented directory and members
US7386622B2 (en) Network converter and information processing system
US8527718B2 (en) Explicit data segment boundaries with SCSI I/O referrals

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant