Один из вариантов может состоять в том, чтобы использовать 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