RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1079464
Accepted
Coffee inTime
Coffee inTime
Asked:2020-02-07 15:10:25 +0000 UTC2020-02-07 15:10:25 +0000 UTC 2020-02-07 15:10:25 +0000 UTC

这个菜单在 Redis 中的实现有多正确?

  • 772

现在我将菜单存储在 Redis 中,每个菜单项都是一个单独的条目。每个菜单项与其父菜单(1 到 1)和子菜单(1 到多个)相关联。

创建菜单项如下所示:

  1. 我创建菜单项:

    HMSET menu_item:1 menu_title 主菜单

    HMSET menu_item:2 menu_title 我的个人资料

    HMSET menu_item:3 menu_title 我的统计

  2. 我告诉每个菜单它的“父”是谁(它总是 1)

    SADD 菜单项:1:父 0

    SADD 菜单项:2:父项 1

    SADD menu_item:3:parent 2

  3. 我向菜单项指出他们的“孩子”是谁,如果有的话(可能有几个)

    SADD menu_item:1:儿童 2

    SADDmenu_item:2:儿童 3

我在这个结构中遇到的问题是:

当我想向用户显示菜单时,我需要获取其父级 == 当前用户菜单项编号的所有菜单项。为此,我使用 获取当前菜单的“子项” SMEMBERS menu_item:1:childs,例如返回,{'4','2','6'}然后我必须创建一个管道,并在内部循环中依次获取每个子项HGETALL,然后排序使用 python 编程语言生成的数组(y 每个菜单项按自己的顺序)。

问题 我是否完全正确地实现了菜单,有没有办法做得更好,例如以某种方式避免管道中的循环,您必须依次选择每个元素?其实我需要经常对存储执行如下查询(我会用SQL举例)

如何在 SQL db 中获取特定菜单项的子项:

1) SELECT * FROM `menu_items` WHERE `parent_id` = 1 ORDER BY `position` ASC
redis
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Mike
    2020-02-16T16:49:20Z2020-02-16T16:49:20Z

    我建议将一个菜单部分的所有项目以json或类似的形式序列化为一个redis key。键本身包含它描述的菜单部分的 id。数组中每个菜单项的描述都包含它的 id 和名称,这使您可以一次显示所有部分,而无需参考其他 redis 键的名称。在菜单元素的描述中,除了其中包含的项目,还值得添加父元素的id,这将简化编辑元素本身名称的任务,因为它是在父元素中描述的。以上述方式存储的一个例子:

    key menu_item-0 => { menu: [
      { name: "Меню1", id: 2 },
      { name: "Меню2", id: 3 }
    ]}
    
    key menu_item-2 => { parent: 0, menu: [
      { name: "Элемент 1-1 (субменю)", id: 4 },
      { name: "Элемент 1-2", id: 5}
    ]}
    
    key menu_item-3 => { parent: 0, menu: [ .... ]}
    
    key menu_item-4 => { parent: 2, menu: [
      { name: "Элемент 1-1-1", id: 10 },
      { name: "Элемент 1-1-2", id: 11}
    ]}
    
    • 1

相关问题

  • Redis为外部连接设置IP地址

  • redis 复制

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5