2009-11-23 41 views
1

我在想用redis(http://code.google.com/p/redis/) 来存储这种红宝石数据结构。如何在redis中建立这个红宝石结构

假设这样的:

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的值。

回答

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") 

所以让所有卷号的排序列表为节点1:

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

...这将被分配给每个节点和NODE_ID的排序版本的值进行排序:1:卷。

或者,你可以使用ZSET这是Redis的1.1

新还要注意,我在这里用套,而不是名单。我发现LIST对于按队列和堆栈方式描述的结构更有用,SET对于独特项目列表更好。

参考文献: