Сложные структуры данных Redis - PullRequest
57 голосов
/ 11 января 2012

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

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

Ответы [ 3 ]

28 голосов
/ 11 января 2012

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

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

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

Да, см. HGET или HMGET или HGETALL .

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

Да, см. HSET .

16 голосов
/ 14 августа 2013

Давайте возьмем сложные данные, которые мы должны сохранить в 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, это использовать хэши и перечислять что-то вроде этого:

Option 1. Хэш-карта с ключами в качестве пользователя: 1 и пользователя: 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 

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

3 голосов
/ 11 января 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...