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

Posted

技术标签:

【中文标题】如何使用redis存储分层数据?【英文标题】:How to use redis to store hierarchical data? 【发布时间】:2014-04-04 16:55:25 【问题描述】:

我有一组分层数据要存储,分层就像站点/建筑物/楼层,例如数据

 
   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】:

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

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

然后定义散列来存储每个建筑物的描述。这些哈希的键可能类似于:building:<ID>

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

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

提示:

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

【讨论】:

以上是关于如何使用redis存储分层数据?的主要内容,如果未能解决你的问题,请参考以下文章

面朝大厂面试官:如何使用Redis实现电商系统的库存扣减?

京东一面:Redis 如何实现库存扣减操作?如何防止商品被超卖?

京东一面:Redis 如何实现库存扣减操作?如何防止商品被超卖?

京东一面:Redis 如何实现库存扣减操作?如何防止商品被超卖?

如何查看Celery存储在redis里面的结果

在 Google App Engine 数据存储中存储分层数据?