Как получить подмножество результатов SMEMBERS?ИЛИ я должен использовать SortedSet с одинаковым значением для счета и участника? - PullRequest
0 голосов
/ 26 февраля 2019

Я новичок в Redis.Например, если у меня есть следующая схема:

(кстати, я не уверен, как выразить переменную в redis. Я просто буду использовать <id:product> в качестве значения первичного ключа. В производстве,Я буду использовать клиент golang для этой работы)

INCR id:product
SET product:<id:product> value
SADD color:red <id:product>

Чтобы запросить продукты, которые имеют красный цвет, я могу сделать:

SMEMBERS color:red

Но проблема в том, что я просто хочуотобразить 10 из них на первой странице, а затем следующие 10 на второй странице и так далее.Как позволить redis вернуть только часть из них, указав аргументы offset и limit?

Что обычно делают эксперты по Redis в этом случае?Вернуть все идентификаторы, даже если я просто хочу 10 из них?Это эффективно?Что делать, если в наборе есть миллионы значений, а мне нужно только 10?

Большое спасибо.

Отредактировано 1: Кстати, я использую устанавливает вместо списков и отсортированных наборов , потому что мне нужно будет выполнить SINTER задания для другихзапросы.

Например:

SADD type:foo <id:product>

SINTER color:red type:foo

И тогда у меня снова будет проблема с нумерацией страниц.Потому что я просто хочу найти 10 перекрестков за раз.(например: если пересечение возвращает миллионы ключей, но на самом деле я просто хочу 10 из них за раз для разбивки на страницы).

Отредактировано 2:

Должен ли я использоватьотсортированы вместо набора?Я не уверен, если это экспертный выбор или нет.Что-то вроде:

ZADD color:red <id:product> <id:product>
ZADD type:foo <id:product> <id:product>

ZRANGE color:red 0 9        // for the first page of red color products

ZINTERSTORE out 2 color:red type:foo AGGREGATE MIN
ZRANGE out 0 9        // for the first page of red color and type foo products
  1. Понятия не имею, предложен или нет вышеуказанный способ.
  2. Что произойдет, если несколько клиентов создадут один и тот же out отсортированный набор?
  3. Имеет ли смысл использовать одно и то же значение для оценки и участника?

1 Ответ

0 голосов
/ 27 февраля 2019
  1. Использование отсортированных наборов является стандартным способом разбиения на страницы в Redis.

  2. Документация ZINTERSTORE гласит: "Если destination уже существует, оно перезаписано. "

    Поэтому не следует использовать" out "в качестве имени ключа назначения.Вместо этого вам следует использовать уникальное или достаточно случайное имя ключа, а затем удалить его, когда вы закончите.

  3. Я не уверен, что вы подразумеваете под "значимым".Это хороший выбор, если вы хотите, чтобы они были в таком порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...