步骤 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 太多请求
SETNX 是 "SET if Not eXists" 的缩写。它基本上将 key 设置为保存字符串值,如果 key 不存在。在这种情况下,它等于 SET。当 key 已经保存值时,不会执行任何操作。新的响应将添加 key-ip,如下所示
SETNX your_ip:PING limit_amount
Example: SETNX 127.0.0.1:PING 10
在 key 上设置超时
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