【问题标题】:Store two sets of tables in redis在redis中存储两组表
【发布时间】:2015-01-14 23:19:02
【问题描述】:

使用Python和redis api;

我想存储一个字典,例如

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

基本上我希望所有东西都可以来回搜索(以最好的方式),但是由于 redis 不支持多个表/记录,我们将如何在 redis 中处理这个问题?

PS:我认为 redis 是最好的选择,而且我也是 python 新手

【问题讨论】:

    标签: python redis key-value


    【解决方案1】:

    直接的方法是使用两种类型的 Set:一种用于存储 value->LOW,另一种用于相反方向,来自 LOW->values 的单词。

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

    【讨论】:

      【解决方案2】:

      对于价值->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 相关联的值。

      【讨论】:

        猜你喜欢
        • 2013-12-15
        • 1970-01-01
        • 2015-05-26
        • 2016-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多