long2ice / fastapi-limiter

A request rate limiter for fastapi
https://github.com/long2ice/fastapi-limiter
Apache License 2.0
484 stars 53 forks source link

What is the behavior if Redis is unavailable? #54

Open stephen-lazarionok opened 6 months ago

zulrang commented 6 months ago

From experience, any calls to your endpoints fail

lib/python3.11/site-packages/redis/_parsers/base.py", line 221, in _readline
    raise ConnectionError(SERVER_CLOSED_CONNECTION_ERROR)
redis.exceptions.ConnectionError: Connection closed by server.
benglewis commented 2 months ago

Is there any plan to fix this?

bashtian-fr commented 10 hours ago

what i did is just add an exception that return 0 for pexpire if redis is unavailable in depends:RateLimiter class:

    async def _check(self, key):
        redis = FastAPILimiter.redis
        try:
            pexpire = await redis.evalsha(
                FastAPILimiter.lua_sha, 1, key, str(self.times), str(self.milliseconds)
            )
        except:
            logger.exception("Redis is unavaible - ratelimiter disabled")
            return 0
        return pexpire

prolly not the best way, it was a 5minutes craft for when I have maintenance to do, hope that helps,