Комплексные структуры данных Redis
Предположим, что у меня есть хэш хэша, например.
$data = {
'harry' : {
'age' : 25,
'weight' : 75,
},
'sally' : {
'age' : 25,
'weight' : 75,
}
}
- Каким будет "обычный" способ хранения такой структуры данных (или вы не хотите?)
- Вы могли бы напрямую получить значение (например, get harry: age?
- После сохранения вы можете напрямую изменить значение вспомогательного ключа (например, sally: weight = 100)
Ответы
Ответ 1
Каким будет "обычный" способ хранения такой структуры данных (или вы не?)
Например, harry и sally будут храниться каждый в отдельном хешах, где поля будут представлять их свойства, такие как возраст и вес. Затем структура set будет содержать все члены (harry, sally,...), которые вы сохранили в redis.
Вы могли бы напрямую получить значение (например, get harry: age?)
Да, см. HGET или HMGET или HGETALL.
После сохранения вы можете напрямую изменить значение дополнительного ключа (например, sally: weight = 100)
Да, см. HSET.
Ответ 2
Давайте возьмем сложные данные, которые мы должны сохранить в 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. Хэш-карта с ключами как пользователь: 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
В зависимости от того, что вы хотите сделать, но если ваша структура данных не является более глубокой и вам нужен доступ к каждому полю, я бы рекомендовал использовать хеши: http://redis.io/commands#hash
Вот хороший обзор по типам redis, каждый из которых имеет pro и contra: http://redis.io/topics/data-types