Как Redis может сортировать по двум разным наборам?

У меня есть два разных отсортированных набора.

Один для идентификатора редактора:

article_id  editor_id
101         10
102         11
103         10
104         10

Другой отсортированный набор предназначен для сортировки по дате:

article_id  day
101         29
102         27
103         25
104         27

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


person uzay95    schedule 26.03.2015    source источник
comment
Отсортированные наборы Redis — это наборы строк, каждая из которых связана с оценкой. Какая часть ваших данных является ключом, значением и оценкой?   -  person thepirat000    schedule 26.03.2015
comment
Значение article_id, счет editor_id и key1 и key2 являются именами ключей.   -  person uzay95    schedule 29.03.2015


Ответы (1)


Предполагая, что article_id – это значение ваших участников, а editor_id/day – баллы в соответствующем отсортированном наборе, и предполагая, что каждый article_id присутствует в обоих отсортированных наборах, вы можете сделать следующее:

ZINTERSTORE t 2 k1 k2 WEIGHTS 100 1 AGGREGATE SUM

Объяснение:

  • t — это временный ключ, в котором будет храниться результат
  • k1 — это отсортированный набор, в котором хранится editor_id
  • k2 — это отсортированный набор, в котором хранится day
  • вес 100 умножает editor_id на 100 (т.е. «сдвигает» его на две позиции вправо)
  • AGGREGATE SUM дает следующий результат: editor_id * 100 + day

Заметки:

  • вместо этого вы можете использовать ZUNIONSTORE для того же результата
  • использование веса 100 предполагает, что day является двузначным значением
person Itamar Haber    schedule 26.03.2015