在Redis中存储树结构

时间:2017-09-26 08:51:08

标签: php json caching redis tree

我有一个如下所示的树结构,使用PHP填充。每次填充完整的结构都非常耗时,所以我想把它放在Redis中。现在它被存储为普通的JSON,但是在添加新项目之后,我需要删除现有的JSON,并且需要再次填充并插入到Redis。 所以我希望有一个结构,以便我可以在任何层次结构中添加一个新项目,即作为父项或子项。 Redis中我可以使用哪种数据结构,我该怎么做?

[
    {
       "id":2,
       "order":2,
       "children":[
          {
             "id":3,
             "order":1,
             "children":[

             ],
             "actions":[
                {
                   "id":1,
                   "slug":"manage",
                   "title":"manage",
                   "api":[

                   ]
                }
             ]
          },
          {
             "id":4,
             "order":2,
             "children":[

             ],
             "actions":[
                {
                   "id":2,
                   "slug":"settings",
                   "title":"settings",
                   "api":[

                   ]
                }
             ]
          }
       ],
       "actions":[
          {
             "id":190,
             "slug":"update",
             "title":"update",
             "api":[

             ]
          }
       ]
    }
 ]

1 个答案:

答案 0 :(得分:3)

的Redis'核心数据结构没有嵌套,所以简短的答案就是你不能轻易做到。

正如您已经正确指出的那样,存储序列化的JSON的缺点是强制完全读取/写入值,即使只触摸了一个子集。

我建议的两个备选方案是a)using Lua to manipulate the serialized JSON或b)使用ReJSON

免责声明:我是ReJSON的作者。