привет. Redis. у меня стоит задача сделать на нем rate limit для доступа к моему публичному API, в доке по инкременту я нашел следующее:
https://redis.io/commands/incr#pattern-rate-limiter-2здесь говорится о возможном race condition и я тут вижу, что похоже запись имеет все шансы остаться в редисе навсегда (если произойдет INCR, произойдет что-то страшное и не произойдет EXPIRE). я на основе этого примера накидал следующее:
FUNCTION LIMIT_API_CALL(id):
MULTI
current = INCR(id)
IF current > 11 THEN
ERROR "too many requests per second"
END
IF value == 1 THEN
EXPIRE(id, 1)
END
EXEC
PERFORM_API_CALL()
END
тут есть транзакция и сразу инкремент, я думаю что GET здесь лишний.
скажите пожалуйста, это норм решение будет, редис же однопоточный и две транзакции одновременно крутить не будет, и в целом транзакции не убьют перфоманс? мне важно чтобы rate limit был строгий вбобавок к этому