web-dev-qa-db-fra.com

Structures de données complexes Redis

Disons que j'ai un hachage d'un hachage, par exemple.

$data = {
    'harry' : {
         'age' : 25,
         'weight' : 75,
    },
    'sally' : {
        'age' : 25,
        'weight' : 75,
    }
}
  1. Quelle serait la façon "habituelle" de stocker une telle structure de données (ou pas?)
  2. Seriez-vous en mesure d'obtenir directement une valeur (par exemple, obtenir harry: age?
  3. Une fois enregistré, pourriez-vous modifier directement la valeur d'une sous-clé (par exemple, sally: weight = 100)
58
Xrender

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 .

30
yojimbo87

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.

18
mareenator

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

3
Max