Получить максимальные значения счетчиков из набора счетчиков в Redis - PullRequest
0 голосов
/ 26 января 2019

Вариант использования:

Я применяю ограничение скорости для веб-приложения.Для каждого входящего HTTP-запроса я увеличиваю счетчик redis, где IP-адрес является ключом.Кроме того, я установил expire с 30-минутным TTL, чтобы избежать утечки памяти.

Проблема:

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

1 Ответ

0 голосов
/ 26 января 2019

Один из вариантов может состоять в том, чтобы использовать redis Sorted Set и иметь счет, равный количеству запросов, поэтому для увеличения счетчика вы можете использовать ZINCRBY и получить верх N вы можете использовать ZRANGE .

Новый запрос:

> ZINCRBY requests 1 10.0.0.1

Получить топ N:

> ZRANGE requests -5 -1 WITHSCORES    

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

Например, если вы хотите посчитать количество запросов на каждый день, вместо того, чтобы использовать одну и ту же строку ключа «запросы» , вы можете создать ключ, похожий на "запросы- дата":

> ZINCRBY requests-19/01/25 1 10.0.0.1
> EXPIREAT requests-19/01/25 1516924800
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...