Я использую INCR
и EXPIRE
для реализации ограничения скорости (для примера ниже, разрешаем только 5 запросов в минуту):
if EXISTS counter
count = INCR counter
else
EXPIRE counter 60
count = INCR counter
if count > 5
print "Exceeded the limit"
Но есть проблема, что люди могут отправить 5 запросов в последнюю секунду за минуту и 5 других запросов в первую секунду в следующую минуту, другими словами, 10 запросов за две секунды.
Есть ли лучший способ избежать проблемы?
Обновление: у меня появилась идея только сейчас: используйте списки для ее реализации.
times = LLEN counter
if times < 5
LPUSH counter now()
else
time = LINDEX counter -1
if now() - time < 60
print "Exceeded the limit"
else
LPUSH counter now()
LTRIM counter 5
Это хороший способ?