如何使用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做到这一点?
答案 0 :(得分:7)
使用pickle或json序列化您的词典{'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])