Redis: Как я могу отсортировать мой хэш по ключам? - PullRequest
5 голосов
/ 25 апреля 2011

Предположим, у меня есть новости, хранящиеся в хэше.У меня есть разные хэши (каждый хэш представляет одну новость):

news:1
news:2
news:3
...

Я хочу получить все ключи с помощью команды KEYS следующим образом:

KEYS news:*

Проблема в том, что ключи неотсортировано:

news:3
news:1
news:2

Я бы хотел получить список ключей в правильном порядке.Я не уверен, что хеш - это структура, которая мне нужна.Но, согласно документации redis :

Хэши Redis - это карты между строковым полем и строковыми значениями, поэтому они представляют собой идеальный тип данных для представления объектов (например, пользователи сколичество полей, таких как имя, фамилия, возраст и т. д.):

Хранение моего новостного объекта в хэше представляется хорошей идеей.

Есть предложения?

Ответы [ 2 ]

5 голосов
/ 25 апреля 2011

Думайте о хэше Redis как о проиндексированных документах.

HSET news:1 title levy_breaks
HSET news:1 type breaking_news
HSET news:1 byline alphazero
HSET news:1 date 04:25:2011
HSET news:1 content <the story>

HSET news:2 ...
..

В приведенном выше примере news:1 - это «ключ хеша», за которым следует «поле хеша» и, наконец, его соответствующее значение.

Тем не менее, кажется, вы просто хотите отсортировать свои "ключи хеша".

Используйте конструкцию MULTI/EXEC, чтобы установить все поля для элемента новостей (который имеет n полей), и, наконец, также добавить ключ хеша - например, Ваша новость - это отсортированный набор. Кроме того, вы можете просто добавить их в список и использовать команду SORT в этом списке.

Документы Redis .

2 голосов
/ 27 апреля 2011

Что вы можете сделать, это сохранить набор или список существующих новостей.Например, когда вы создаете новую новость, скажем, news:4, вы можете добавить индекс 4 к набору, скажем, list:news, который теперь будет иметь [1, 2, 3, 4].

Теперь предположим, что ваши новостиструктура хэша - дата, автор.С этим на месте вы можете выполнить следующее:

sort list:news get *->some_value_a ->*->some_value_b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...