在redis中存储两组表

时间:2015-01-14 06:42:24

标签: python redis key-value

使用Python和redis api;

我想存储一个字典,例如

Value -> List of Words(L.O.W)
Each word in L.O.W -> Value

基本上我希望所有东西都可以搜索(以最好的方式)来回,但由于redis不支持多个表/记录,我们如何在redis中处理它?<​​/ p> PS:我正在考虑redis是最好的选择,我也是python的新手

2 个答案:

答案 0 :(得分:1)

直接的方法是使用两种类型的集合:一种用于存储值 - >低,一种用于存储相反方向的字,来自LOW-&gt;值。

SADD val1 low1 low2
SADD val2 low2 low3
SADD low1 val1
SADD low2 val1 val2
SADD low3 val2

答案 1 :(得分:0)

对于值 - > L.O.W。,我认为有两个可行的选择:

1)存放L.O.W.作为一个以值为键名的集合。在redis-py中,这可能看起来像这样:

import redis
db = redis.StrictRedis() # Put connection info here
...
...
db.sadd(value, *listOfWords) # Assuming listOfWords is an iterable object (list, set, etc.)

#To recover the LOW for a given value:
listOfWords = db.smembers(value)

2)存储所有值 - > L.O.W.查找为哈希,其键/值对分别是您的“值”和“序列化”单词列表。顶级哈希将被赋予一个关键名称,以确保其功能是显而易见的(在下面的示例中,我选择了value_low_lookup

db.hset(`value_low_lookup`, value, ';'.join(listOfWords))

#Recovering the LOW
listOfWords = db.hget('value_low_lookup', value).split(';')

选项#2在Redis中的存储方面具有更高的内存效率,但需要在客户端进行更多处理(拉出分号连接的字符串并将其分隔为单词列表)。在插入Redis之前,您还必须在客户端执行唯一性保证(如果这是一项要求)。

对于L.O.W .->值,我认为散列可能是在Redis中表示该散列的最有效方式,类似于上面的选项#2。此哈希中的键/值对可以是一个单词,也可以是与该单词所来自的LOW相关联的值。