Redis: 实现树形数据结构

目的:

n         实现树形数据结构

n         一次获取所有子节点

 

节点间没有排序,如果要实现排序,可以在每个节点增加一个排序字段,在 SORT 的 BY 参数中指定排序依据。

原始树:

 

    id: root, name: Root

      id: 1, name: Node1

        id: 11, name: Node11

          id: 111, name: Node111

          id: 112, name: Node112

        id: 12, name: Node12

      id: 2, name: Node2

        id: 21, name: Node21

        id: 22, name: Node22

 

生成树的操作,添加节点时:

 

    hmset tree:root name "Root" path ""

 

    hmset tree:1 name "Node1" path "root"

    sadd tree:root:heirs 1

 

    hmset tree:11 name "Node11" path "root,1"

    sadd tree:root:heirs 11

    sadd tree:1:heirs 11

 

    hmset tree:111 name "Node111" path "root,1,11"

    sadd tree:root:heirs 111

    sadd tree:1:heirs 111

    sadd tree:11:heirs 111

 

    hmset tree:112 name "Node112" path "root,1,11"

    sadd tree:root:heirs 112

    sadd tree:1:heirs 112

    sadd tree:11:heirs 112

 

    hmset tree:12 name "Node12" path "root,1"

    sadd tree:root:heirs 12

    sadd tree:1:heirs 12

 

    hmset tree:2 name "Node2" path "root"

    sadd tree:root:heirs 2

 

    hmset tree:21 name "Node21" path "root,2"

    sadd tree:root:heirs 21

    sadd tree:2:heirs 21

 

    hmset tree:22 name "Node22" path "root,2"

    sadd tree:root:heirs 22

    sadd tree:2:heirs 22

 

根据 id 获取子节点:

 

    SORT tree:root:heirs BY n/a GET tree:*->name GET tree:*->path

    SORT tree:1:heirs BY n/a GET tree:*->name GET tree:*->path

    SORT tree:11:heirs BY n/a GET tree:*->name GET tree:*->path

    SORT tree:2:heirs BY n/a GET tree:*->name GET tree:*->path

 

删除节点 111(没有子节点):

 

    // 检查子节点

    SMEMBERS tree:111:heirs         // 没有子节点

    // 删除上级节点的引用

    HGET tree:111 path              // root,1,11

    SREM tree:root:heirs 111

    SREM tree:1:heirs 111

    SREM tree:11:heirs 111

    // 删除自己

    DEL tree:111

 

删除节点 11(还有子节点112):

 

    // 检查子节点

    SMEMBERS tree:111:heirs         // 112

    // 删除子节点 ... 参见删除节点 111

    // 删除上级节点的引用

    HGET tree:11 path               // root,1

    SREM tree:root:heirs 11

    SREM tree:1:heirs 11

    // 删除自己

    DEL tree:111

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值