Rate limiter for async functions using Redis as a backend.
- Small and simple
- Can be used as a decorator or as a context manager
- Can be used for both clients and servers
- Works with
asyncio - Works with any amount of processes
- Works with both
redis.asyncio.client.Redisandaioredis - Free of race-conditions (hopefully!)
- Supports
redissince7.0 - Fully typed with annotations and checked with mypy, PEP561 compatible
pip install asyncio-redis-rate-limitExtras available:
pip install asyncio-redis-rate-limit[redis]pip install asyncio-redis-rate-limit[aioredis](for python versions<3.11)
As a decorator:
>>> from asyncio_redis_rate_limit import rate_limit, RateSpec
>>> from redis.asyncio import Redis as AsyncRedis # pip install redis
>>> redis = AsyncRedis.from_url('redis://localhost:6379')
>>> @rate_limit(
... rate_spec=RateSpec(requests=1200, seconds=60),
... backend=redis,
... )
... async def request() -> ...:
... ... # Do something useful! Call this function as usual.Or as a context manager:
>>> from asyncio_redis_rate_limit import RateLimiter, RateSpec
>>> from redis.asyncio import Redis as AsyncRedis # pip install redis
>>> redis = AsyncRedis.from_url('redis://localhost:6379')
>>> async def request() -> ...:
... async with RateLimiter(
... unique_key='api-name.com',
... backend=redis,
... rate_spec=RateSpec(requests=5, seconds=1),
... ):
... ... # Do the request itself.This project was generated with wemake-python-package. Current template version is: 1d63652fbb33ebe2f6d932f511b7f529a4ce2d2a. See what is updated since then.