2016-05-10 2 views
0

У меня есть сортированный набор, который продолжает расти в реальном времени и содержит некоторые идентификаторы, которые я хочу получить 5 за раз в обратном порядке. Это в основном для реализации разбиения на страницы. Эти идентификаторы являются ключами к Hashmap. Есть ли способ получить 5 элементов за время, эффективно используя операции redis ZSet?Redis - получение 5 элементов за раз из отсортированного набора

Например, в отсортированном наборе ниже допустим, что я хочу получить 5 элементов до «572c7d87e53156245a3fd167», как я могу это сделать, учитывая, что новые идентификаторы могут продолжать добавляться после моего последнего элемента во время выполнения? Ожидаемый результат должен дать мне ID 572c7c58e53156245a3fd166, 572c7ad2e53156245a3fd165, 572c746e1eeba6b059b08f1b, 572c74531eeba6b059b08f1a и 572c6fc9612ad65757cca4f9.

1) "572b58c0dd319a1a4703eba8" 
2) "1462429760.8629999" 
3) "572c697e612ad65757cca4f7" 
4) "1462499582.6889999" 
5) "572c6a8e612ad65757cca4f8" 
6) "1462499854.056" 
7) "572c6fc9612ad65757cca4f9" 
8) "1462501193.927" 
9) "572c74531eeba6b059b08f1a" 
10) "1462502355.5250001" 
11) "572c746e1eeba6b059b08f1b" 
12) "1462502382.313" 
13) "572c7ad2e53156245a3fd165" 
14) "1462504018.325" 
15) "572c7c58e53156245a3fd166" 
16) "1462504408.1370001" 
17) "572c7d87e53156245a3fd167" 
18) "1462504711.4200001" 
19) "572c7da3e53156245a3fd168" 
20) "1462504739.352" 
+0

Вы посмотрели на zrevrange? –

+0

спасибо @ItamarHaber. Да, я посмотрел на него. Главная проблема в моем случае - из-за значений баллов. Следовательно, если мне нужны последние значения N, трудно установить нижнюю границу для оценки для диапазона. – sudhama

ответ

0

Один из вариантов, чтобы посмотреть на ZRANGEBYLEX или ZRANGEBYSCORE и использовать смещение/кол.

Однако то, что я обычно делаю для разбивки на страницы, это создать новый список (вид моментального снимка исходного списка), который не изменяется динамически и загружает данные оттуда. Таким образом, это не похоже на погоню за движущейся мишенью. Я просто установил TTL и забыл об этом.

+0

спасибо. это интересный способ сделать это. Это хорошо работает для вас даже в масштабе? Похоже, если слишком много пользователей, тогда у них будет много таких списков. – sudhama

+0

Мой TTL - 20 минут, и я ограничиваю список 1000 ключами. Каждый ключ составляет около 32 байт. Так что у меня около 32 КБ на пользователя. Это означает, что с 320 МБ я могу поддерживать 10000 «одновременных» пользователей. Этого более чем достаточно для моего сайта. –

+0

прохладный. звучит хорошо. спасибо за обмен информацией. – sudhama

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