如何使用redis存储分层数据?

时间:2014-03-03 15:08:29

标签: redis node-redis

我有一组要存储的分层数据,层次结构就像site / building / floor,数据,例如

{ 
   site:'New York',
   buildings: [
              {
                name:'building a',
                floors: [
                       'Ground':[{room:room1},{room:room2}],
                       'First':[{room:room1},{room:room2}]
                        ]
              }
          ] 
},
{ 
   site:'London',
   buildings: [
              {
                name:'building a',
                floors: [
                       'Ground':[{room:room1},{room:room2}],
                       'First':[{room:room1},{room:room2}]
                        ]
              }
          ] 
}

我想将这些房间数据存储到一个集合中,但我也可以通过选择网站名称或(网站名称+建筑物名称)或(网站名称+建筑物名称+楼层)来查询房间的子集

1 个答案:

答案 0 :(得分:8)

在Redis中,您不会将数据存储在唯一的数据结构中。您必须创建多个数据结构,每个数据结构都由一个密钥标识。

使用约定来命名您的密钥:例如site:<CITY>:buildings将是一个包含给定网站的建筑ID列表的集合。

然后定义哈希以存储每个建筑物描述。这些哈希的关键可能是:building:<ID>

在哈希中你有2个成员:名字和楼层。 Floors值是包含楼层标识符列表的集合的唯一ID。

然后为每个楼层创建最后一组,以存储房间名称。集合的名称可能类似于:floor:<ID>

提示:

  • 使用redis INCR命令生成唯一ID。
  • 如果您打算存储非常多的密钥(更长的密钥需要更多内存),请避免使用太长的密钥。