步骤 1. 前提条件#
- •Python
- •Docker
- •Docker Compose
步骤 2. 克隆仓库#
git clone https://github.com/redis-developer/basic-rate-limiting-demo-python
步骤 3. 运行 docker compose 或手动安装 redis#
docker network create global
docker-compose up -d --build
如果您手动安装 redis,打开 django-backend/configuration 文件夹并将 .env.example
复制为 .env
。并提供环境变量的值 - REDIS_HOST: Redis 服务器主机 - REDIS_PORT: Redis 服务器端口 - REDIS_DB: Redis 服务器数据库索引 - REDIS_PASSWORD: Redis 服务器密码
步骤 4. 设置并运行#
安装 python、pip 和 venv(在 mac 上: https://installpython3.com/mac/)
使用 python 版本: 3.8
python3 -m venv venv
source ./venv/bin/activate
pip3 install -r requirements.txt
python3 manage.py collectstatic
python3 manage.py runserver
步骤 5. 访问限速应用
工作原理?#
数据如何存储:#
此应用将在客户端超出每时间段(默认:10 秒)内的特定请求数量(默认:10 个)后阻止连接。应用在每次请求后会返回以下标头。这将告知用户在超出限制前还剩下多少请求。在第 10 次请求时,服务器应返回 HTTP 状态码 429 (Too Many Requests)。
SETNX 是“SET if Not eXists”(如果不存在则设置)的缩写。它基本上在键不存在时将键设置为字符串值。在这种情况下,它等同于 SET。当键已经存在值时,不执行任何操作。新的响应按如下所示添加 key-ip
SETNX your_ip:PING limit_amount
Example: SETNX 127.0.0.1:PING 10
为键设置超时
EXPIRE your_ip:PING timeout
Example: EXPIRE 127.0.0.1:PING 1000
数据如何访问:#
接下来的响应是获取桶
GET your_ip:PING
Example: GET 127.0.0.1:PING
接下来的响应是改变桶
DECRBY your_ip:PING amount
Example: DECRBY 127.0.0.1:PING 1