Пересекающиеся отсортированные множества в Redis - PullRequest
3 голосов
/ 08 января 2012

У меня есть отсортированный набор в Redis, содержащий значения, подобные приведенным ниже:

ZADD ranking1 0 Kyle Neath
ZADD ranking1 1 Cameron McEfee
ZADD ranking1 2 Ben Bliekamp
ZADD ranking1 3 Justin Palmer

ZADD ranking2 0 Cameron McEfee
ZADD ranking2 1 Justin Palmer
ZADD ranking2 2 Kyle Neath
ZADD ranking2 3 Ben Bliekamp

... и так далее.

Есть ли способ получить оценки для определенного человека и вернуть их в виде списка? Например, вызов Kyle Neath вернет [0, 2]. Должен ли я моделировать это по-другому, чтобы достичь того же самого?

1 Ответ

3 голосов
/ 08 января 2012

При текущем расположении данных единственный способ получить список - использовать один zscore для ранжирования.

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

HMSET "Kyle Neath" ranking1 0 ranking2 2
HMSET "Cameron McEfee" ranking1 1 ranking2 0
HMSET "Ben Bliekamp" ranking1 2 ranking2 3
HMSET "Justin Palmer" ranking1 3 ranking2 1

И для получения списка

HVALS "Kyle Neath"

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

...