【问题标题】:How to model this ruby structure in redis如何在redis中建模这个ruby结构
【发布时间】:2010-12-19 14:23:11
【问题描述】:

我正在考虑使用 redis (http://code.google.com/p/redis/) 来存储这种 ruby​​ 数据结构。

假设:

node1server1 = { "volume1" => 10400, "volume2" => 11221, "volume3" => 13212, "volume4" => 17227 }
node1server2 = { "volume1" => 17450, "volume2" => 14241, "volume3" => 15512, "volume4" => 12427 }

node2server1 = { "volume1" => 17655, "volume2" => 16754, "volume3" => 19877, "volume4" => 10000 }
node2server2 = { "volume1" => 11456, "volume2" => 13776, "volume3" => 18766, "volume4" => 16555 }

使用哪种 redis 数据类型更好?

数据需要更新,我需要对node1server1+node1server2和node2server1+node2server2的值进行排序。

【问题讨论】:

    标签: ruby redis


    【解决方案1】:

    我知道你发布已经有一段时间了,但你能提供更多关于数据应该如何排序的信息吗?

    另外,我假设每台服务器的卷数量可变,每个节点的服务器数量可变

    一种方法如下:

    node_id:1:server_id:1:volume_id:1 = 10400
    node_id:1:server_id:1:volume_id:2 = 11221
    node_id:1:server_id:1:volume_id:3 = 13212
    node_id:1:server_id:1:volume_id:4 = 17227
    node_id:1:server_id:2:volume_id:1 = 17450
    node_id:1:server_id:2:volume_id:1 = 14241
    ...
    node_id:1:volumes = SET("server_id:1:volume_id:1", "server_id:1:volume_id:2", "server_id:1:volume_id:3", "server_id:1:volume_id:4", "server_id:2:volume_id:1", "server_id:2:volume_id:2", "server_id:2:volume_id:3", "server_id:2:volume_id:4")
    

    所以要获得 node1 的所有卷号的排序列表:

    SORT node_id:1:volumes BY node_id:1:*
    

    ...它将按分配给每个节点的值和 node_id:1:volumes 的排序版本进行排序。

    或者,您可以使用 Redis 1.1 中新增的 ZSET

    另外请注意,我在这里使用了 SET,而不是 LIST。我发现 LIST 对于用队列和堆栈描述的结构更有用,而 SET 更适合用于唯一项目的列表。

    参考资料:

    【讨论】:

      猜你喜欢
      • 2013-09-28
      • 2012-04-13
      • 2023-03-04
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 2018-05-18
      相关资源
      最近更新 更多