Eu quero criar este tipo de estrutura em redis: (são basicamente dados json)
{
"id": "0001",
"name":"widget ABC",
"model": "model123",
"service":"standard",
"admin_password": 82616416,
"r1":
{
"extid":"50000",
"password":"test123",
},
"r2":
{
"ext":"30000",
"password":"test123",
},
}
O que tentei até agora:
Eu tentei criar um hash sem os hashes "sub", apenas para ter certeza de que tenho o básico. Aqui está o que eu comecei com o redis-cli:
HMSET widget:1 id 0001 name 'widget ABC' model 'model123' service standard admin_password 82616416
HMSET widget:2 id 0002 name 'widget ABC' model 'model123' service standard admin_password 12341234
Isso parece funcionar. Posso ver que tenho 2 "registros" de dados de widgets em uma coleção de widgets.
Mas minha tentativa de criar um registro com os dados r1 falha.
Isto é o que eu tentei:
HMSET widget:3 id 0002 name 'widget ABC' model 'model123' service standard admin_password 12341234 r1{extid 50000}
Isso cria uma chave de hash "r1{extid" com um valor de hash de "50000}"
Qualquer sugestão seria apreciada. Acho que meu problema é minha linguagem. Eu simplesmente não sei o suficiente sobre a sintaxe redis para saber quais palavras usar em minha pesquisa no google.
Talvez eu só tenha que "achatar" os dados assim:
HMSET widget:3 id 0002 name 'widget ABC' model 'model123' service standard admin_password 12341234 r1_extid 50000 r1_password test123 r2_extid 30000 r2_password test123
Obrigado.
O Redis não oferece suporte a estruturas de dados aninhadas e, especificamente, não oferece suporte a um Hash dentro de um Hash :) Você basicamente pode escolher entre duas opções: serializar o Hash interno e armazená-lo em um campo Hash ou usar outra chave Hash e apenas mantenha uma referência a ele em um campo do Hash externo.
Eu sugiro ReJSON . Ele é construído para lidar exatamente com esses problemas.
Você pode usar a notação de caminho para acessar elementos aninhados.