Я новичок в 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
- Понятия не имею, предложен или нет вышеуказанный способ.
- Что произойдет, если несколько клиентов создадут один и тот же
out
отсортированный набор? - Имеет ли смысл использовать одно и то же значение для оценки и участника?