Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/EvoluxBR/python-redis-rate-limit
Python Rate Limiter implemented based on Redis INCR, EXPIRE, EVALSHA and EVAL.
https://github.com/EvoluxBR/python-redis-rate-limit
python rate-limiting redis
Last synced: about 2 months ago
JSON representation
Python Rate Limiter implemented based on Redis INCR, EXPIRE, EVALSHA and EVAL.
- Host: GitHub
- URL: https://github.com/EvoluxBR/python-redis-rate-limit
- Owner: EvoluxBR
- License: other
- Created: 2016-07-23T03:50:41.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2024-02-06T01:21:54.000Z (11 months ago)
- Last Synced: 2024-04-26T22:41:07.635Z (9 months ago)
- Topics: python, rate-limiting, redis
- Language: Python
- Homepage:
- Size: 53.7 KB
- Stars: 121
- Watchers: 3
- Forks: 38
- Open Issues: 3
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
- starred-awesome - python-redis-rate-limit - Python Rate Limiter implemented based on Redis INCR, EXPIRE, EVALSHA and EVAL. (Python)
README
python-redis-rate-limit
=======================
.. image:: https://github.com/EvoluxBR/python-redis-rate-limit/actions/workflows/python-package.yml/badge.svg
:target: https://github.com/EvoluxBR/python-redis-rate-limit/actions/workflows/python-package.yml.. image:: https://img.shields.io/pypi/v/python-redis-rate-limit.svg
:target: https://pypi.python.org/pypi/python-redis-rate-limit.. image:: https://img.shields.io/pypi/dm/python-redis-rate-limit.svg
:target: https://pypi.python.org/pypi/python-redis-rate-limitThis lib offers an abstraction of a Rate Limit algorithm implemented on top of
Redis >= 2.6.0.Supported Python Versions: 2.7, 3.6+
Example: 10 requests per second
.. code-block:: python
from redis_rate_limit import RateLimit, TooManyRequests
try:
with RateLimit(resource='users_list', client='192.168.0.10', max_requests=10):
return '200 OK'
except TooManyRequests:
return '429 Too Many Requests'Example: using as a decorator
.. code-block:: python
from redis_rate_limit import RateLimit, TooManyRequests
@RateLimit(resource='users_list', client='192.168.0.10', max_requests=10)
def list_users():
return '200 OK'try:
return list_users()
except TooManyRequests:
return '429 Too Many Requests'Example: 600 requests per minute
.. code-block:: python
from redis_rate_limit import RateLimit, TooManyRequests
try:
with RateLimit(resource='users_list', client='192.168.0.10', max_requests=600, expire=60):
return '200 OK'
except TooManyRequests:
return '429 Too Many Requests'Example: 100 requests per hour
.. code-block:: python
from redis_rate_limit import RateLimit, TooManyRequests
try:
with RateLimit(resource='users_list', client='192.168.0.10', max_requests=100, expire=3600):
return '200 OK'
except TooManyRequests:
return '429 Too Many Requests'Example: you can also setup a factory to use it later
.. code-block:: python
from redis_rate_limit import RateLimiter, TooManyRequests
limiter = RateLimiter(resource='users_list', max_requests=100, expire=3600)
try:
with limiter.limit(client='192.168.0.10'):
return '200 OK'
except TooManyRequests:
return '429 Too Many Requests'Example: you can also pass an optional Redis Pool
.. code-block:: python
import redis
from redis_rate_limit import RateLimit, TooManyRequests
redis_pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=0)
try:
with RateLimit(resource='users_list', client='192.168.0.10', max_requests=10, redis_pool=redis_pool):
return '200 OK'
except TooManyRequests:
return '429 Too Many Requests'