Disons que j'ai un hachage d'un hachage, par exemple.
$data = {
'harry' : {
'age' : 25,
'weight' : 75,
},
'sally' : {
'age' : 25,
'weight' : 75,
}
}
Quelle serait la façon "habituelle" de stocker une telle structure de données (ou pas?)
Par exemple, harry et sally seraient stockés chacun dans des hachages séparés où les champs représenteraient leurs propriétés comme l'âge et le poids. La structure set contiendrait alors tous les membres (harry, sally, ...) que vous avez stockés dans redis.
Seriez-vous en mesure d'obtenir directement une valeur (par exemple, obtenir harry: age?)
Oui, voir HGET ou HMGET ou HGETALL .
Une fois enregistré, pourriez-vous modifier directement la valeur d'une sous-clé (par exemple, sally: weight = 100)
Oui, voir HSET .
Prenons une donnée complexe que nous devons stocker dans redis, par exemple celle-ci:
$data = {
"user:1" : {
name : "sally",
password : "123"
logs : "25th october" "30th october" "12 sept",
friends : "34" , "24", "10"
}
"user:2" :{
name : ""
password : "4567"
logs :
friends: ""
}
}
Le problème auquel nous sommes confrontés est que les amis et les journaux sont des listes. Donc, ce que nous pouvons faire pour représenter ces données dans redis est d'utiliser des hachages et répertorie quelque chose comme ceci:
Option 1. Une carte de hachage avec les clés en tant qu'utilisateur: 1 et utilisateur: 2
hmset user:1 name "sally" password "12344"
hmset user:2 name "pally" password "232342"
create separate list of logs as
logs:1 { here 1 is the user id }
lpush logs:1 "" "" ""
lpush logs:2 "" "" ""
and similarly for friends.
Option 2: Une carte de hachage avec des données json vidées comme encodage de chaîne
hmset user:1 name "sally" password "12344" logs "String_dumped_data" friends "string of dumped data"
Option 3: Ceci est une autre représentation de # 1
something like user:1:friends -> as a list
and user:2:friends -> as a list
Corrigez-moi si j'ai tort, s'il-vous plait.
Cela dépend de ce que vous voulez faire, mais si votre infrastructure de données n'est pas plus imbriquée et que vous avez besoin d'accéder à chaque champ, je recommanderais d'utiliser des hachages: http://redis.io/commands#hash
Voici un bon aperçu des types de données redis, chacun avec ses avantages et ses inconvénients: http://redis.io/topics/data-types