Se você não sabe exatamente como organizar os dados no Redis, fiz alguns testes de desempenho, incluindo a análise dos resultados. O dicionário que usei ( d ) tinha 437.084 chaves (formato md5), e os valores desta forma:
{"path": "G:\tests\2687.3575.json",
"info": {"f": "foo", "b": "bar"},
"score": 2.5}
Primeiro teste (inserir dados em um mapeamento de valor-chave redis):
conn.hmset('my_dict', d)
conn.info()['used_memory_human']
for key in d:
json.loads(conn.hget('my_dict', key).decode('utf-8').replace("'", '"'))
import ast
for key in d:
ast.literal_eval(conn.hget('my_dict', key).decode('utf-8'))
conn.delete('my_dict')
Segundo teste (inserir dados diretamente nas chaves Redis):
for key in d:
conn.hmset(key, d[key])
conn.info()['used_memory_human']
for key in d:
json.loads(conn.hgetall(key)[b'info'].decode('utf-8').replace("'", '"'))
for key in d:
conn.delete(key)
Como você pode ver, no segundo teste, apenas os valores 'info' devem ser analisados, porque hgetall (chave) já retorna um dict, mas não um aninhado.
E, claro, o melhor exemplo de usar Redis como dictos de python, é o Primeiro Teste
json.dumps()
write as string e depois recupere do usuário redisjson.loads()
para desserializar de volta para a estrutura de dados python