写点什么

使用 Redis 解决“树”形数据的复杂查询

  • 2019-10-23
  • 本文字数:528 字

    阅读完需:约 2 分钟

使用Redis解决“树”形数据的复杂查询

最近因业务需要,研究了一下树数据结果的存储及查询解决方案。 最初的想法是使用 neo4j,可是在网上看了一下开源的不支持集群,感觉用的人不多。网上也查了一些树形结构数据存储方案 但每种实现方案都有它的一定局限性。想了一短时间后,想出了以下几种方案:


方案一:


因为复杂的查询都由 Redis 来处理,所以数据库表的设计就变得非常简单:tree 表



方案二:


Redis 的数据存储方案:


把表的数据存储到一个 Hash 表中,使用表中的 id 值做为此 hash 表的 key, value 值为:


代码实现

为了简化测试,这里只演示 Redis 相关的操作:

1、Tree 类定义

2、往 Redis 中添加测试数据

3、Lua 代码的实现

在 Lua 中使用递归时,需要使用“尾调用”来优化代码。关于尾调用的知识,大家可以上网去搜索。


获取所有子节点 get-tree-childs.lua



获取所有子节点数目 get-tree-childs-cnt.lua



获取所有子节点数目 get-tree-parent.lua



获取所有子节点数目 get-tree-parent-cnt.lua



以上代码因为使用了“尾调用”,所以变得相对比较复杂。

总结

此方案相对比较灵活,能支持相对比较大量的数据。


缺点:过于依赖 Redis。数据同步会麻烦些,好在操作不是很复杂。


本文转载自公众号中间件小哥(ID:huawei_kevin)。


原文链接:


https://mp.weixin.qq.com/s/FQtIuS5r-tr7lf9CKs9UDg


2019-10-23 11:472769

评论

发布
暂无评论
发现更多内容

架构师训练营第七周课后练习

薛凯

Week 7 作業

Judyyy

#链表# #快慢指针#

玉皇大亮

链表 快慢指针

架构师训练营第 1 期第 7 周作业

好吃不贵

极客大学架构师训练营

策略模式

猴子胖胖

设计模式 Go 语言

架构师训练营第一期 - 第七周学习总结

卖猪肉的大叔

极客大学架构师训练营

架构师训练营第 1 期 -Week7 - 课后练习

鲁小鲁

极客大学架构师训练营

第三周-课后练习

jizhi7

第七周 性能优化 作业一

应鹏

极客大学架构师训练营

第七周作业

Geek_ac4080

第 7 周 听说你有好几个线程

Pyr0man1ac

架构师训练营 1 期 - 第七周总结(vaik)

行之

极客大学架构师训练营

装饰器模式

猴子胖胖

设计模式 Go 语言

Week 7 學習總結

Judyyy

架构师训练营第七周学习笔记

一马行千里

学习 极客大学架构师训练营

Week_07 作业

golangboy

极客大学架构师训练营

科技与产业革命的历史性交汇期,光华工程科技奖名单上的AI排面

脑极体

第3周作业

伊灵

week3- 请在草稿纸上手写一个单例模式的实现代码,拍照提交作业

未来已来

架构师训练营week07作业

IT老兵重开始

第 7 周 作业

Pyr0man1ac

架构师训练营第 1 期 -Week7 - 性能优化一学习总结

鲁小鲁

极客大学架构师训练营

week3-作业二:根据当周学习情况,完成一篇学习总结

未来已来

架构师训练营 1 期 - 第七周作业(vaik)

行之

极客大学架构师训练营

第七周 性能优化 作业二

应鹏

极客大学架构师训练营

架构师训练营第 1 期 - 第 7 周 - 命题作业

wgl

第三周-总结

jizhi7

极客大学架构师训练营

第七周总结

Geek_ac4080

Week3 代码重构

贺志鹏

极客大学架构师训练营

架构师训练营1期 - week07- 作业

lucian

极客大学架构师训练营

【架构师训练营第 1 期 07 周】 作业

Bear

极客大学架构师训练营

使用Redis解决“树”形数据的复杂查询_文化 & 方法_qiujiayu_InfoQ精选文章