Сложные структуры данных Redis
допустим, у меня есть хэш хэшей, например,
$data = {
'harry' : {
'age' : 25,
'weight' : 75,
},
'sally' : {
'age' : 25,
'weight' : 75,
}
}
- каков был бы "обычный" способ хранения такой структуры данных (или нет?)
- сможете ли вы напрямую получить значение (например, получить Гарри: возраст ?
- после сохранения вы можете напрямую изменить значение sub-ключа (например, sally: weight = 100)
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