动态命名redis的元组

时间:2014-02-26 01:15:10

标签: python redis

我有一个csv文件,其中每行包含一个人的ID#,然后是一堆属性。我希望能够为每个包含所有属性的人创建一个元组,然后将元组命名为ID#的一些变体。

然后将所有这些元组添加到redis中的一组用于存储。

我似乎无法弄清楚如何创建以人员ID#命名的元组。

我知道动态命名变量不是最好的做法,但我宁愿不把所有元组放在列表中或设置为然后放入redis集(这是必须的);它似乎效率低下且繁琐。

这是我现在的代码:

with open('personlist.csv','rb') as f:
for line in f:
        row = line.split(',')
        personID = row[0]
        attrb1 = row[1]
        attrb2 = row[2]
        attrb3 = row[3]
        # Need to name tuple here and define as (attrb1, attrb2, attrb3)
        r.lpush('allpersonslist',tuple)

3 个答案:

答案 0 :(得分:0)

此示例需要额外的代码才能运行。我假设您使用的是Redis-py之类的redis API。变量r是与redis的开放连接。

import pickle

with open('personlist.csv', 'rb') as f:
    for line in f:
        row = line.split(',')
        personID = row[0]
        attrb1 = row[1]
        attrb2 = row[2]
        attrb3 = row[3]
        #put the attributes in a tuple
        tuple = (attrb1, attrb2, attrb3)
        #serialize the tuple before adding it to the set
        r.set("person/%d" %personID,pickle.dumps(tuple,-1))

def getPerson(Id):
    return pickle.loads(r.get("person/%d" %Id))    

您可以致电getPerson(5)以返回与ID为5的人相关联的元组。

答案 1 :(得分:0)

如果每个人都有最大N属性,则基于哈希的语言无关解决方案。这里列出了3个用于保存/读取/删除人员值的命令。

  1. HMSET'allpersonshash'personID:0 personID:1 ......
  2. HMGET'allpersonshash'personID:0 personID:1 personID:2 ... personID:N
  3. HDEL'allpersonshash'personID:0 personID:1 personID:2 ... personID:N

答案 2 :(得分:0)

一种相当普遍的方法是使用带有json blob的有序集,例如:

ZADD userid, '{field1:value1,field2:value2}'