跳过正文
  1. 全部/
  2. 笔记/
  3. 项目/
  4. 后端项目/

额度限制

目录

全局配额表(t_global_quota)

字段类型说明
idbigint(20)主键自增ID
channelint(10)消息类型(1: 邮件;2: 短信;3: 飞书)
numint(10)限频数(单位:秒)
unitint(10)限频单位(毫秒)1000=1秒,60000=1分钟

业务配额表(t_source_quota)

记录某个业务可发送消息的频率,比如某些平台短信一分钟只能触发一次

字段类型说明
idbigint(20)主键自增ID
source_idvarchar(256)业务ID
channelint(10)消息类型(1: 邮件;2: 短信;3: 飞书)
numint(10)限频数
unitint(10)限频单位(毫秒)1000=1秒,60000=1分钟

用Redis实现限额器
#

Redis 是一个高性能的分布式缓存和存储系统,非常适合实现分钟级/秒级额度限制。​

实现步骤​

定义 Redis 的计数器,键名格式:

  • rate_limit:{业务ID}:{channel}:{时间戳}

  • 如 rate_limit:source123:2:202412071015 ​ 请求时:​

  • 使用 Redis 的 INCR 操作递增计数器。​

  • 检查计数器是否为1,是的话说明新创建,设置过期时间,比如60s,具体多少取决于传入的参数​

  • 检查计数器值是否超过限制。​

  • 如果超过限制,返回错误;否则允许请求。

Reply by Email