Сложные структуры данных Redis


допустим, у меня есть хэш хэшей, например,

$data = {
    'harry' : {
         'age' : 25,
         'weight' : 75,
    },
    'sally' : {
        'age' : 25,
        'weight' : 75,
    }
}
  1. каков был бы "обычный" способ хранения такой структуры данных (или нет?)
  2. сможете ли вы напрямую получить значение (например, получить Гарри: возраст ?
  3. после сохранения вы можете напрямую изменить значение sub-ключа (например, sally: weight = 100)
3 53

3 ответа:

каков был бы "обычный" способ хранения такой структуры данных (или а ты нет?)

например Гарри и Салли будут храниться каждый в отдельной хэши где поля будут представлять их свойства, такие как возраст и вес. Тогда set структура будет содержать всех членов (Гарри, Салли,...) который вы сохранили в redis.

сможете ли вы напрямую получить значение (например, получить Гарри: возраст ?)

Да, вижу HGET или HMGET или HGETALL.

после сохранения вы можете напрямую изменить значение sub-ключа (например Салли : вес = 100)

Да, вижу HSET.

давайте возьмем сложные данные, которые мы должны хранить в redis , например это:

  $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: ""
                   }
          }

проблема, с которой мы сталкиваемся состоит в том, что друзья и журналы списки. Итак, что мы можем сделать, чтобы представить эти данные в redis, это использовать хэши и списки примерно так:

опции 1. Хэш-карта с ключами как user: 1 и user: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.

опции 2: хэш-карта с сброшенными данными json в виде строки кодировать

      hmset user:1 name "sally" password "12344" logs "String_dumped_data" friends "string of dumped data"

опции 3: это еще одно представление #1

      something like user:1:friends -> as a list 
      and            user:2:friends -> as a list 

пожалуйста , поправьте меня, если я ошибаюсь.

зависит от того, что вы хотите сделать, но если ваша структура данных не является более глубокой вложенной и вам нужен доступ к каждому полю, я бы рекомендовал использовать хэши:http://redis.io/commands#hash

вот хороший обзор по типам данных redis, каждый с pro и contra:http://redis.io/topics/data-types