2014-12-23 3 views
3

Я хотел бы знать, как сохранить список объектов в Redis. У меня есть такой ключ.Как сохранить отсортированный набор объектов в redis?

users:pro 
{ 
name: "Bruce", age: "20", score: 100, 
name: "Ed", age: "22", score: 80 
} 

Где я хочу сохранить список хешей в качестве значения определенного ключа. Я хотел бы использовать поле score в качестве поля оценки в отсортированном наборе. Как я мог это сделать?

Я видел, что я написал один хэш для ключа, но что, если я хочу, чтобы несколько хэшей и одно из полей хеша должно действовать как поле оценки для отсортированного набора?

+0

просто хранить его ... redis не заботится, какой тип. – Jasen

+0

@Jasen Как его сохранить? Команда «HSET» способна хранить только один хеш, теперь как хранить несколько хэшей в одном ключе? – user12458

+0

Возможно, вы могли бы сохранить весь список под одним хешем ... redis не делает несколько индексов. – Jasen

ответ

4

Использование одного ключа для хранения всех ваших хешей потребует некоторой сериализации, поскольку Redis не поддерживает вложенные структуры данных. Результат будет следующим:

key: users:pro 
     | 
     +-----> field  value 
       name:Bruce "age: 20, score: 100" 
       name:Ed  "age: 22, score: 80" 

> HMSET users:pro name:Bruce "age: 20, score: 100" name:Ed "age:22, score:80" 

соответствующие отсортированный набор будет:

key: users:pro.by_scores 
     | 
     +---> scores: 80   100 
     +---> values: "name:Ed" "name:Bruce" 

> ZADD users:pro.by_scores 80 "name:Ed" 100 "name:Bruce" 

Примечание 1: этот подход предписывает уникальный идентификатор для каждого пользователя, в настоящее время используется name свойство, которое может быть проблематичным.

Примечание 2:: во избежание сериализации (и десериализации) вы можете использовать выделенный ключ для каждого пользователя. Это означает:

key: users:pro:Bruce 
     | 
     +-----> field  value 
       age   20 
       score  100 

key: users:pro:Ed 
     | 
     +-----> field  value 
       age   22 
       score  80 

> HMSET users:pro:Bruce age 20 score 100 
> HMSET users:pro:Ed age 22 score 80 

key: users:pro.by_scores 
     | 
     +---> scores:  80    100 
     +---> values: "users:pro:Ed" "users:pro:Bruce" 

> ZADD users:pro.by_scores 80 "users:pro:Ed" 100 "users:pro:Bruce" 
+1

Итак, вместо' users: pro: Ed', я должен использовать 'users: pro: 101', где' 101' - уникальный идентификатор. – user12458

+1

Да - определенно лучший и безопасный подход. Я бы также рекомендовал включать идентификатор в сам хэш как отдельное поле (т. Е. «Пользователи HSET: pro: 101 id 101') - несмотря на« денормализацию », это значительно облегчает работу с данными. –

Смежные вопросы