Redis中的Dicts列表

时间:2011-12-29 06:27:32

标签: python redis

如何使用Python-redis将Redis中的dicts列表与密钥保持一致。以下是我的目标数据结构:

'browsing_history' : {
    'session_key_1' : [{'image': 'image-url', 'url' : 'url', 'title' : 'test_title', 'description' : 'test_description'}, {''image': 'image-url2', 'url' : 'url2', 'title' : 'test_title2', 'description' : 'test_description2'}],
    'session_key_2' : [{'image': 'image-url', 'url' : 'url', 'title' : 'test_title', 'description' : 'test_description'}, {''image': 'image-url2', 'url' : 'url2', 'title' : 'test_title2', 'description' : 'test_description2'}],
}

想要添加到会话列表中以及添加新会话以及还原它们。我怎么能用Python-redis做到这一点?

2 个答案:

答案 0 :(得分:7)

使用picklejson序列化您的词典{'image': 'image-url', 'url' : 'url', 'title' : 'test_title', 'description' : 'test_description'}。使用redis列表将它们存储为字符串。使用browsing_history:SESSION_KEY_1等密钥访问这些列表。如果您需要获取所有会话密钥的列表,您可能需要为密钥browsing_history:*维护一组字符串。

答案 1 :(得分:2)

一种不需要序列化且不受字符串大小限制(但不一定具有更高性能)的解决方案是将每个字典存储在其自己的专用哈希图中:

# define root name for hashes used 
# to store list elements - dicts
hash_root_name='test_hash'

# sample list of dicts
dicts_list=[test_dict1, test_dict2]

# store dicts from the list to consecutively 
# named redis hashes,  with list indices 
# appended to hash root name
for i in range(len(dicts_list)):
    
    redis_client.hmset(hash_root_name+str(i), 
                       dicts_list[i])