如何使用Redis构建速率限制器

速率限制是许多开发人员在其生命中的某个时刻可能必须处理的一种机制。它可用于多种ag万博下载万博最新版本下载苹果用途,如共享对有限资源的访问,或限制对API端点的请求数量,并使用429状态代码进行响应。

在本教程中,我们将了解如何使用各种编程语言实现速率限制:

使用Python#

第一步。先决条件#

  • Python
  • 码头工人
  • 码头工人组成

步骤2。克隆存储库#

git克隆https://github.com/redis-developer/basic-rate-limiting-demo-python

步骤3。运行docker compose或手动安装redis#

docker网络创建全局
Docker-compose up -d——build

如果安装redis,请手动打开django后端/配置文件夹并复制环境署署长创建.env.并提供环境变量的值

-REDIS_主机:REDIS服务器主机
-REDIS_端口:REDIS服务器端口
-REDIS_DB:REDIS服务器数据库索引
-REDIS_密码:REDIS服务器密码

步骤4。设置和运行#

安装python、pip和venv(在mac上:https://installpython3.com/mac/)

使用python版本:3.8

Python3 -m venv
来源/venv/bin/激活
pip3安装-r requirements.txt
python3 jobs collectstatic
python3 manage.py运行服务器

第5步。访问限速应用程序

速度限制

它是如何工作的?#

数据的存储方式:#

这个应用程序将在超过一定数量的请求(默认:10秒)每次(默认:10秒)后阻塞来自客户端的连接。这将让用户知道在运行超过限制之前他们还有多少请求。在第十次运行时,服务器应该返回一个HTTP状态代码429 Too Many Requests

SETNX是“SET if Not eXists”的缩写。如果key不存在,它基本上设置key来保存字符串值。在这种情况下,它等于SET。当key已经保存一个值时,不执行任何操作。key-ip添加新的响应如下所示:

SETNX your_ip: PING limit_amount
示例:SETNX 127.0.0.1:PING 10

更多信息

设置超时键:

到期your_ip: PING超时
例如EXPIRE 127.0.0.1:PING 1000

更多信息

如何访问数据:#

下一个响应是get bucket:

获取您的ip:PING
示例:获取127.0.0.1:PING

更多信息

下一个响应被更改桶:

减少您的ip:PING金额
例如:DECRBY 127.0.0.1:PING 1

更多信息

参考文献#

Baidu