一种运用redis构建树形数据结构的方法及装置与流程

文档序号:18832447发布日期:2019-10-09 03:53阅读:1276来源:国知局
一种运用redis构建树形数据结构的方法及装置与流程
本申请涉及数据处理
技术领域
,尤其涉及一种运用redis构建树形数据结构的方法及装置。
背景技术
:电商类网站为了方便用户快速查找购买商品的信息,通常包含大量类目信息。类目信息包括商品的种类、功能、适用对象或者品牌等等,比如用户想买一套西装,那么他可以通过类目服装->男装->西装,找到西装类目下的所有商品,再通过自己的品味筛选出想要购买的西装。类似这种搜索的路径,在内存中一般保存为树形结构,以简单的类目为例,具体如图1所示。通过图1可以看出,在电商平台上,实际类目每个分支下的内容非常多,例如,总类目下就分为3个分支,每个分子下又包含若干小分支,由此构成多层级的庞大的“树形”结构,在这种“树形”结构中,商品的类目层次分明,用户可以逐级查找,直至找到符合自己需求的商品。然而,以上这种“树形”结构虽然满足了用户的需求,但是对于“树形”结构本身的构建与维护来说,还存在很多问题。首先,结构构建困难,上述数据一般存储在数据库中,而数据库中的数据是单条独立的结构化数据,这样构建“树形”结构比较繁琐;其次,在上述结构中,从某一节点向下搜索比较困难,比如目前客户端请求女装下的分类,在“树形”结构中,首先要通过遍历的方式找到女装的位置,然后才能返回到女装下属的类目中;最后,对于上述“树形”结构的修改与添加比较困难,在需要修改和添加内容时,也是同样需要采用遍历的方式找到相应的位置才能进行操作。所以,如何构建一种简单的数据结构,既满足用户的需求又简化构建过程,成为一个亟待解决的问题。技术实现要素:本申请提供了一种运用redis构建树形数据结构的方法及装置,以解决目前数据库中建立数据结构复杂的情况,减少遍历次数,简化构建过程。一方面,本申请提供了一种运用redis构建树形数据结构的方法,包括:获取构建操作指令,所述构建操作指令用于对数据库中商品类目数据进行处理;根据所述构建操作指令,设置redis的操作参数及操作类型,所述操作参数包括redis内字符串类型存储格式和redis内集合类型存储格式,所述操作类型为批量处理,每一条商品类目数据的内容以所述字符串类型存储,每一条商品类目数据的子节点id以所述集合类型存储;根据所述操作参数及所述操作类型,将数据库中商品类目数据存入所述redis中。可选的,所述根据构建操作指令,设置redis的操作参数及操作类型的步骤包括:根据所述构建操作指令,获取操作redis的句柄;根据所述操作redis的句柄,设置redis的操作参数及操作类型。可选的,所述根据操作参数及操作类型,将数据库中商品类目数据存入所述redis中的步骤包括:根据所述操作类型,遍历整个数据库中的商品类目数据;根据所述操作参数,将每一条所述商品类目数据存入所述redis中。可选的,所述根据操作参数,将每一条所述商品类目数据存入所述redis中的步骤包括:根据所述操作参数,将每一条所述商品类目数据以字符串类型存储;获取每一条所述商品类目数据的所有子节点id;将每一条所述商品类目数据的所有子节点id以集合类型存储。可选的,在所述根据操作参数及操作类型,将数据库中商品类目数据存入所述redis中之前,还包括:转换存储格式,将数据库中商品类目数据的格式转化为符合所述redis存储的格式。可选的,在所述根据操作参数及操作类型,将数据库中商品类目数据存入所述redis中之前,还包括:获取操作所述字符串类型的redis句柄和操作所述集合类型的redis句柄。另一方面,本申请提供了一种运用redis构建树形数据结构的装置,包括:指令获取单元,用于获取构建操作指令,所述构建操作指令用于对数据库中商品类目数据进行处理;设置单元,用于根据所述构建操作指令,设置redis的操作参数及操作类型,所述操作参数包括redis内字符串类型存储格式和redis内集合类型存储格式,所述操作类型为批量处理,每一条商品类目数据的内容以所述字符串类型存储,每一条商品类目数据的子节点id以所述集合类型存储;结构构建单元,用于根据所述操作参数及所述操作类型,将数据库中商品类目数据存入所述redis中。可选的,所述设置单元包括:第一句柄获取单元,用于根据所述构建操作指令,获取操作redis的句柄;参数及类型设置单元,用于根据所述操作redis的句柄,设置redis的操作参数及操作类型。可选的,所述结构构建单元包括:遍历单元,用于根据所述操作类型,遍历整个数据库中的商品类目数据;存储操作单元,用于根据所述操作参数,将每一条所述商品类目数据存入所述redis中。可选的,所述存储操作单元包括:第一操作单元,用于根据所述操作参数,将每一条所述商品类目数据以字符串类型存储;节点获取单元,用于获取每一条所述商品类目数据的所有子节点id;第二操作单元,用于将每一条所述商品类目数据的所有子节点id以集合类型存储。可选的,所述装置还包括:格式转换单元,用于转换存储格式,将数据库中商品类目数据的格式转化为符合所述redis存储的格式。可选的,所述装置还包括:第二句柄获取单元,用于获取操作所述字符串类型的redis句柄和操作所述集合类型的redis句柄。由以上技术方案可知,本申请提供一种运用redis构建树形数据结构的方法及装置,利用redis进行批量存储的操作,并且在redis的字符串类型和集合类型中存储数据库中的商品类目数据,这种方法仅仅需要在批量存储时进行一次遍历操作,即可将数据库中的所有单条商品类目数据存入redis中,根据redis本身的结构特点,构建成一个低维度,少层级的树形数据结构,数据间耦合度低,结构清晰,易读性高,可以方便地查看某类目下的子类目列表或者某类目的同级类目,也可以方便地修改单个类目的内容。并且,本申请提供的这一种构建数据结构的方法不用像构建高维度树一样,需要遍历整个树去查询,通过redis的快速查询能力,能够瞬间获取任一节点下的子节点,快速省时。附图说明为了更清楚地说明本申请的技术方案,下面将对实施案例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本申请中提供的现有技术中电商类网站数据库中商品类目数据的存储结构;图2为本申请实施例提供的第一种运用redis构建树形数据结构的方法流程图;图3为本身请实施例提供的第二种运用redis构建树形数据结构的方法流程图;图4为本申请实施例提供的redis中数据存储的示意图;图5为本申请实施例提供的redis中数据结构的示意图;图6为本申请实施例提供的一种运用redis构建树形数据结构的装置结构图;图7为本申请实施例提供的设置单元的结构图;图8为本申请实施例提供的结构构建单元的结构图;图9为本申请实施例提供的存储操作单元的结构图。具体实施方式为了使本
技术领域
的人员更好地理解本申请中的技术方案,下面将结合附图,对本申请实施例中的技术方案进行清楚、完整地描述。参见图2,本申请提供的第一种运用redis构建树形数据结构的方法,包括:步骤101,获取构建操作指令,所述构建操作指令用于对数据库中商品类目数据进行处理;构建操作指令用于指示redis操作的进行。现有的电商类网站数据库中通常是将商品类目数据单条保存,例如:如上所示将数据存入数据库中,再利用具体的程序将所有单条数据构建成多层次的树形结构,构建的树形结构如图1所示,商品的类目层次分明,用户可以逐级查找,直至找到符合自己需求的商品,但是用户每一级的查找,在程序上都属于一次遍历操作,直至用户找到目标商品,在这一过程中,会发生很多次遍历操作,导致用户的整个查询过程非常复杂和费时。本申请的目的在于利用redis本身存储结构特征,构建结构简单和层级低的数据结构,减少遍历次数,使得数据结构的过程桁架简单快捷,用户查询的时间更短。步骤102,根据构建操作指令,设置redis的操作参数及操作类型,所述操作参数包括redis内字符串类型存储格式和redis内集合类型存储格式,所述操作类型为批量处理,每一条商品类目数据的内容以字符串类型存储,每一条商品类目数据的子节点id以集合类型存储。redis是一个key-value存储系统,它支持存储的value类型很多,包括:string(字符串类型)、list(链表类型)、set(集合类型)、zset(有序集合类型)和hash(哈希类型),本申请实施例中主要利用string(字符串类型)和set(集合类型)对电商类网站数据库中的数据进行存储,string是最简单的类型,一个key对应一个value;set和我们数学中的集合概念相似,对集合有添加或者删除元素的操作,也有对多个集合进行求交并差等操作,并且操作中key理解为集合的名字。在本申请实施例中,为了保证存入redis中的数据能够清楚地显示出商品类目信息以及与此条数据有关的其他数据的信息,需要对字符串类型和集合类型的存储格式进行设置。例如,设置字符串类型的key值的头为“subject:info:”,当有数据存入redis时,以字符串类型存储的形式为key=“subject:info:1000”;再比如,设置集合类型的key值的头为“subject:tree:”,当有数据存入redis时,以集合类型存储的形式为key=“subject:tree:0”。在本申请实施例中,为了避免商品类目数据单条存入redis中,造成的输入输出频繁的问题,还需要对redis的操作类型进行设置,将操作类型设置为批量处理,遍历所有数据的同时,将数据全部存入redis的相应类型中,此后不会再发生遍历操作,节省大量查询的时间。步骤103,根据操作参数及操作类型,将数据库中商品类目数据存入redis中。根据redis中字符串类型和集合类型的存储格式,批量将商品类目数据对应存入字符串类型和集合类型中,由于redis本身具有快速查询的特点,在查询时可直接读取数据信息,不需要再发生遍历操作,所以,仅仅在数据存入时发生了一次遍历,不仅数据存入迅速,数据读取也方便快捷。本申请实施例一提供一种运用redis构建树形数据结构的方法,利用redis进行批量存储的操作,并且在redis的字符串类型和集合类型中存储数据库中的商品类目数据,这种方法仅仅需要在批量存储时进行一次遍历操作,即可将数据库中的所有单条商品类目数据存入redis中,根据redis本身的结构特点,构建成一个低维度,少层级的树形数据结构,数据间耦合度低,结构清晰,易读性高,可以方便地查看某类目下的子类目列表或者某类目的同级类目,也可以方便地修改单个类目的内容。并且,本申请提供的这一种构建数据结构的方法不用像构建高维度树一样,需要遍历整个树去查询,通过redis的快速查询能力,能够瞬间获取任一节点下的子节点,快速省时。参见图3,为本申请实施例提供的第二种运用redis构建树形数据结构的方法,包括:步骤201,获取构建操作指令,所述构建操作指令用于对数据库中商品类目数据进行处理。步骤202,根据构建操作指令,获取操作redis的句柄。句柄是一个标识符,用来标识对象或者项目,应用程序几乎总是通过调用一个windows函数来获得一个句柄,之后其他的windows函数就可以使用该句柄,以引用相应的对象。在本申请中,redis的句柄也相当于一个操作redis的权限,获取这个权限之后,可以对redis进行下一步的操作,比如设置操作参数或者操作类型等等,可以使操作更加安全。步骤203,根据操作redis的句柄,设置redis的操作参数及操作类型,所述操作参数包括redis内字符串类型存储格式和redis内集合类型存储格式,所述操作类型为批量处理,每一条商品类目数据的内容以字符串类型存储,每一条商品类目数据的子节点id以集合类型存储。步骤204,根据操作类型,遍历整个数据库中的商品类目数据。由于预先设置的操作类型为批量处理,顾名思义就是将所有对象一起进行处理,所以有遍历整个数据库的过程。步骤205,根据操作参数,将每一条所述商品类目数据以字符串类型存储。通常,在数据库中保存的单条商品类目数据包括若干字段,具体包括标识、父节点标识、类目名字、类目说明和图片地址等,在进行本申请实施例中的操作时,将这些字段中的内容均以字符串类型进行存储,每一条商品类目数据存储为一条字符串类型数据,具体参见图4,图中subject文件夹中包括info文件夹和tree文件夹,info文件夹中又包含若干个以字符串类型存储的商品类目数据。步骤206,获取每一条商品类目数据的所有子节点id。在上述步骤中已经介绍,每一条商品类目数据中包括父节点标识,父节点标识可以为父节点的id,用于标识父节点,通过步骤204中的遍历过程,已经能将所有商品类目数据的父节点id收集起来,反之,通过分析处理,可以获取到每一条商品类目数据包含的所有子节点的id。步骤207,将每一条商品类目数据的所有子节点id以集合类型存储。再次参见图4,图中subject文件夹下的tree文件夹就是用来保存子节点id的,tree文件夹中数据的数量就是所有包含子节点的父节点的数量,每一条数据中保存的是该父节点下所有子节点的id。经过上述步骤205-步骤207之后,数据库中单条的商品类目数据已经按照redis中相应的存储格式进行保存,此时查看单条info文件夹中的数据,如:subjcet:info:2001,则该条数据的value为:其中,id表示标识、pid表示父节点标识、name表示类目名字、introduce表示类目说明,以及,pic表示图片地址;查看单条tree文件夹中的数据,如:subjcet:tree:1001,则该条数据的value为:rowvalue1200322004表中是id为1001的父节点所包括的子节点的id,也可以称之为id为1001的数据类目下的子类目的id,从上表可知,该条数据的子类目包括2个,id分别是2003和2004。当需要查看与“android”类目同级的商品类目时,只需要先通过info文件确定“android”类目的id为2004,pid为1001,然后查找tree文件中id为1001的商品类目数据,在该条数据下,包括id为2003和2004的子类目id,所以可以找到与“android”同级的商品类目数据的id为2003,再通过info文件找到id为2003的商品类目“ios”。由此可知,tree文件夹中只记录该条数据子类目的id,而不记录其他内容,其他内容是通过info文件记录的。根据本申请实施例中的方法建立的数据结构只具有两个层级,具体在redis中的存储形式如图5所示,这样,当需要修改数据的内容时,仅仅修改info文件中的内容即可,不会出现数据关联或者数据同步导致修改过程复杂的问题。另外,建立如图5中这种的2层级、低维度的树形结构,当需要查看某一商品类目的同级商品类目时,可以先通过info文件找到单条商品类目的pid,然后根据pid就可以查询到该商品类目同级的其他商品类目数据,使得查询的过程更加方便。值得说明的是,redis支持主从同步,数据可以从主服务器向任意数量的从服务器上同步,从服务器也可以是关联其他从服务器的主服务器。所以,本申请实施例中引入redis,既可以实现快速查询,也解决了分布式微服务的服务状态的问题,避免出现数据同步不一致的问题。本申请实施例二中的其余内容与实施例一中的相同,参照实施例一中的内容,再此不再赘述。本申请实施例二提供一种运用redis构建树形数据结构的方法,利用redis进行批量存储的操作,并且在redis的字符串类型和集合类型中存储数据库中的商品类目数据,这种方法仅仅需要在批量存储时进行一次遍历操作,即可将数据库中的所有单条商品类目数据存入redis中,根据redis本身的结构特点,构建成一个低维度,少层级的树形数据结构,数据间耦合度低,结构清晰,易读性高。并且,本申请提供的这一种构建数据结构的方法不用像构建高维度树一样,需要遍历整个树去查询,通过redis的快速查询能力,能够瞬间获取任一节点下的子节点,快速省时。可选的,在本申请实施例一和实施例二中,在根据操作参数及操作类型,将数据库中商品类目数据存入所述redis中之前,还包括:转换存储格式,将数据库中商品类目数据的格式转化为符合所述redis存储的格式。由于目前电商类网站的数据库中存储的商品类目数据通常是以java格式保存的,但是redis中存储数据是以json格式进行的,所以,在将商品类目数据存入redis之前,还需要将数据库中以java格式保存的数据转为json格式,这种情况通常是建立json格式转换的类对数据进行格式转换,方便数据的快速存储。可选的,在本申请实施例一和实施例二中,在根据操作参数及操作类型,将数据库中商品类目数据存入所述redis中之前,还包括:获取操作所述字符串类型的redis句柄和操作所述集合类型的redis句柄。根据上述内容可知,句柄是一个标识符,用来标识对象或者项目,应用程序几乎总是通过调用一个windows函数来获得一个句柄,之后其他的windows函数就可以使用该句柄,以引用相应的对象。在本申请中,操作字符串类型的redis的句柄和操作集合类型的redis句柄均相当于一个操作字符串和集合的权限,获取这个权限之后,可以对redis中字符串类型的存储和集合类型的存储进行下一步的操作,使得操作更加准确与安全。参见图6,为本申请提供的一种运用redis构建树形数据结构的装置结构图,包括:指令获取单元601,用于获取构建操作指令,所述构建操作指令用于对数据库中商品类目数据进行处理;设置单元602,用于根据所述构建操作指令,设置redis的操作参数及操作类型,所述操作参数包括redis内字符串类型存储格式和redis内集合类型存储格式,所述操作类型为批量处理,每一条商品类目数据的内容以所述字符串类型存储,每一条商品类目数据的子节点id以所述集合类型存储;结构构建单元603,用于根据所述操作参数及所述操作类型,将数据库中商品类目数据存入所述redis中。可选的,如图7所示,所述设置单元602包括:第一句柄获取单元701,用于根据所述构建操作指令,获取操作redis的句柄;参数及类型设置单元702,用于根据所述操作redis的句柄,设置redis的操作参数及操作类型。可选的,如图8所示,所述结构构建单元603包括:遍历单元801,用于根据所述操作类型,遍历整个数据库中的商品类目数据;存储操作单元802,用于根据所述操作参数,将每一条所述商品类目数据存入所述redis中。可选的,如图9所示,所述存储操作单元802包括:第一操作单元901,用于根据所述操作参数,将每一条所述商品类目数据以字符串类型存储;节点获取单元,用于获取每一条所述商品类目数据的所有子节点id;第二操作单元902,用于将每一条所述商品类目数据的所有子节点id以集合类型存储。可选的,所述装置还包括:格式转换单元604,用于转换存储格式,将数据库中商品类目数据的格式转化为符合所述redis存储的格式。可选的,所述装置还包括:第二句柄获取单元605,用于获取操作所述字符串类型的redis句柄和操作所述集合类型的redis句柄。由以上技术方案可知,本申请提供一种运用redis构建树形数据结构的方法及装置,利用redis进行批量存储的操作,并且在redis的字符串类型和集合类型中存储数据库中的商品类目数据,这种方法仅仅需要在批量存储时进行一次遍历操作,即可将数据库中的所有单条商品类目数据存入redis中,根据redis本身的结构特点,构建成一个低维度,少层级的树形数据结构,数据间耦合度低,结构清晰,易读性高,可以方便地查看某类目下的子类目列表或者某类目的同级类目,也可以方便地修改单个类目的内容。并且,本申请提供的这一种构建数据结构的方法不用像构建高维度树一样,需要遍历整个树去查询,通过redis的快速查询能力,能够瞬间获取任一节点下的子节点,快速省时。本领域技术人员在考虑说明书及实践这里公开的申请后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本
技术领域
中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围由权利要求指出。应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。以上所述的本申请实施方式并不构成对本申请保护范围的限定。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1