2012-07-11 64 views
1

我在redis中有一个包含一系列Id的列表。每个ID对于单个对象都是唯一的,我将其作为JSON字符串存储在单独的密钥上。数据之间的Redis关系

所以我有这样的:

redis> LRANGE mylist 0 -1 
1) "one" 
2) "two" 
3) "three" 

而且我有单独的键mylist:onemylist:twomylist:three

我正在将ID保存到列表中,以便在我的应用程序上构建一个简单的FIFO队列。

什么是最有效的方式来获得mylist中的所有ID和他们从每个单独的密钥的匹配值?有没有更好的方法去解决它?

+0

你为什么不储存JSON字符串的顺序? – Scharron 2012-07-11 12:43:21

+0

@Scharron当对象仍在列表中时,对象随时间变化(因此存储在键中的值)。唯一的ID使我有可能在不知道对象当前是什么的情况下查询它们 – mobius 2012-07-11 12:53:23

+0

使用Hash存储对象怎么样?这样你可以用'lrange mylist 0 -1'查询'mylist',然后使用'hmget my_hash list_of_keys_from_mylist'获得对象? – Scharron 2012-07-11 13:04:26

回答

2

最有效的方法可能是使用了SORT command

# Populate list 
rpush mylist one two three 
set mylist:one 1 
set mylist:two 2 
set mylist:three 3 

# Retrieve all items with their corresponding values 
sort mylist by nosort get # get mylist:* 
1) "one" 
2) "1" 
3) "two" 
4) "2" 
5) "three" 
6) "3"