Хранить и извлекать объекты из Redis?

У меня есть несколько объектов Mountain, у которых есть идентификатор и имя.

Я хранил эти объекты так

HMSET Mountain:1 id "1" name "Mo1"
HMSET Mountain:2 id "2" name "Mo2"
HMSET Mountain:3 id "3" name "Mo2"

Как я могу получить все горные объекты? Или есть лучший способ хранения объектов в Redis?


person maskapsiz    schedule 08.07.2014    source источник


Ответы (1)


Вы должны сделать это с помощью 2 команд:

KEYS Mountain:*
HGETALL <everykeys>

Но, если вы можете, лучше не использовать команду KEYS, поэтому вы можете сделать что-то вроде этого:

HMSET Mountain:1 id "1" name "Mo1"
SADD Montains Mountain:1
HMSET Mountain:2 id "2" name "Mo2"
SADD Montains Mountain:2
HMSET Mountain:3 id "3" name "Mo3"
SADD Montains Mountain:3

и получить его:

SMEMBERS Mountain
HGETALL <everykeys>

Redis — это система ключ/значение с дополнительным типом данных, поэтому вам нужно построить свой индекс. Например, для индексации имени, если имя уникально:

HSET Mountains:IdByName "Mo3" 3

и вы получите идентификатор:

HGET Mountains:IdByName "Mo3"

для неуникальных давайте снова используем set

SADD Mountains:IdByName:Mo3 3

И вы увеличите количество ключей и поэтому KEYS не рекомендую, потому что дорого

следующий шаг - использовать скрипт lua для получения/установки хэша из/и индекса

person Philippe T.    schedule 08.07.2014
comment
Ok. Я понимаю концепцию. Есть ли способ получить Mountain, имя которой Mo2? - person maskapsiz; 08.07.2014
comment
Redis имеет более сложный тип данных, чем классический ключ/значение, но этого недостаточно для этого. вы должны создать свой собственный . я положил это в ответ, это очень полезно - person Philippe T.; 08.07.2014