发布时间:2026/6/16 14:44:50
PHPAPI限流与频率控制
PHPAPI限流与频率控制API限流是保护后端服务的重要手段。防止接口被过度调用导致服务不可用。今天说说PHP中各种限流算法的实现。计数器限流最简单的实现。phpclass RateLimiter{private Redis $redis;private int $maxRequests;private int $window;public function __construct(Redis $redis, int $maxRequests 100, int $window 60){$this-redis $redis;$this-maxRequests $maxRequests;$this-window $window;}public function allow(string $key): bool{$current $this-redis-get($key);if ($current ! false $current $this-maxRequests) {return false;}if ($current false) {$this-redis-setex($key, $this-window, 1);} else {$this-redis-incr($key);}return true;}public function getRemaining(string $key): int{$current (int)$this-redis-get($key);return max(0, $this-maxRequests - $current);}public function reset(string $key): void{$this-redis-del($key);}}$limiter new RateLimiter(new Redis());$clientIp $_SERVER[REMOTE_ADDR] ?? 127.0.0.1;if (!$limiter-allow(api:{$clientIp})) {http_response_code(429);echo json_encode([error 请求过于频繁]);exit;}echo json_encode([status ok, remaining $limiter-getRemaining(api:{$clientIp})]);?令牌桶限流算法。phpclass TokenBucket{private Redis $redis;private int $capacity;private int $rate;public function __construct(Redis $redis, string $key, int $capacity 100, int $rate 10){$this-redis $redis;$this-key bucket:{$key};$this-capacity $capacity;$this-rate $rate;}public function allow(int $cost 1): bool{$this-refill();$tokens $this-redis-decrBy($this-key, $cost);return $tokens 0;}private function refill(): void{$script local key KEYS[1]local capacity tonumber(ARGV[1])local rate tonumber(ARGV[2])local now tonumber(ARGV[3])local ttl redis.call(TTL, key)if ttl 0 thenredis.call(SET, key, capacity, EX, 60)return capacityendlocal tokens tonumber(redis.call(GET, key)) or capacitylocal lastRefill tonumber(redis.call(GET, key .. :time)) or nowlocal elapsed now - lastRefilllocal newTokens math.floor(elapsed * rate / 60)if newTokens 0 thentokens math.min(capacity, tokens newTokens)redis.call(SET, key, tokens)redis.call(SET, key .. :time, now)endreturn tokens;$this-redis-eval($script, [$this-key, $this-capacity, $this-rate, time()], 1);}}?滑动窗口限流。phpclass SlidingWindow{private Redis $redis;private string $key;private int $limit;private int $window;public function __construct(Redis $redis, string $key, int $limit 100, int $window 60){$this-redis $redis;$this-key sw:{$key};$this-limit $limit;$this-window $window;}public function allow(): bool{$now microtime(true);$windowStart $now - $this-window;$this-redis-zRemRangeByScore($this-key, 0, $windowStart);$current $this-redis-zCard($this-key);if ($current $this-limit) return false;$this-redis-zAdd($this-key, $now, (string)$now);$this-redis-expire($this-key, $this-window 1);return true;}public function getRemaining(): int{$now microtime(true);$windowStart $now - $this-window;$this-redis-zRemRangeByScore($this-key, 0, $windowStart);return max(0, $this-limit - $this-redis-zCard($this-key));}}?API限流是保护后端的重要措施。计数器简单但精度不够令牌桶允许突发流量滑动窗口精度高。选择合适的限流算法根据业务需求来定对外的API用严格限流内部服务可以用宽松限流。

相关新闻

苹果盛大的入场艺术:晚入场背后的系统性决策逻辑
2026/6/11 15:25:22

苹果盛大的入场艺术:晚入场背后的系统性决策逻辑

1. 项目概述:一场关于“入场时机”的深度复盘你有没有注意过,每次苹果发布一款新产品,总有人在发布会前夜发帖:“这功能安卓三年前就有了”;也总有人在发布会后一周感叹:“怎么现在用回安卓,突然…

阅读更多
告别拥堵预测不准:手把手教你用GE-GAN(WGAN+DeepWalk)复现交通状态估计算法
2026/6/11 12:45:00

告别拥堵预测不准:手把手教你用GE-GAN(WGAN+DeepWalk)复现交通状态估计算法

从零实现交通状态预测:GE-GAN实战指南1. 理解交通状态预测的技术演进交通状态预测一直是城市智能化管理中的核心难题。传统方法主要依赖固定传感器和统计模型,但往往受限于数据稀疏性和动态变化。近年来,深度学习技术为这一领域带来了全新突破…

阅读更多
Windows一键运行的驾驶员疲劳监测工具:带图形界面、实时眨眼分析与声光报警
2026/6/13 22:35:41

Windows一键运行的驾驶员疲劳监测工具:带图形界面、实时眨眼分析与声光报警

本文还有配套的精品资源,点击获取 简介:直接双击tkinter_UI.exe就能启动的疲劳检测程序,适配普通USB摄像头,无需编程基础。运行时自动调用dlib和Haar级联定位人脸,实时计算双眼EAR值判断眨眼频率,结合68…

阅读更多
Python自动化抢票脚本实战:从Selenium到APScheduler的完整技术方案
2026/6/16 13:58:21

Python自动化抢票脚本实战:从Selenium到APScheduler的完整技术方案

1. 项目概述:当技术遇上“一票难求”如果你也经历过在演唱会开票瞬间,眼睁睁看着页面卡顿、按钮变灰,最终与心仪的座位失之交臂的绝望,那你一定能理解“抢票”这件事已经演变成了一场没有硝烟的技术战争。手动刷新、拼手速、拼网速…

阅读更多
Apollo Save Tool:10分钟掌握PS4游戏存档管理的终极解决方案
2026/6/16 13:58:21

Apollo Save Tool:10分钟掌握PS4游戏存档管理的终极解决方案

Apollo Save Tool:10分钟掌握PS4游戏存档管理的终极解决方案 【免费下载链接】apollo-ps4 Apollo Save Tool (PS4) 项目地址: https://gitcode.com/gh_mirrors/ap/apollo-ps4 你是否曾因PS4游戏存档丢失而痛心疾首?是否想要在不同主机间自由迁移游…

阅读更多
RHEL源码级构建:重建企业Linux信任锚点的工程实践
2026/6/16 13:58:21

RHEL源码级构建:重建企业Linux信任锚点的工程实践

1. 项目概述:RHEL 源码级构建不是“编译一个ISO”,而是重建整个发行版的信任锚点“RHEL (source)”这五个字符背后,藏着Linux世界里最严肃、最精密、也最容易被误解的一类工程实践。它绝不是网上搜个“rpm -ba *.spec”就能跑通的玩具项目&am…

阅读更多
5分钟掌握APK安装器:Windows上安装Android应用的终极指南
2026/6/16 13:58:21

5分钟掌握APK安装器:Windows上安装Android应用的终极指南

5分钟掌握APK安装器:Windows上安装Android应用的终极指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经想在Windows电脑上安装Android应用&…

阅读更多
Ubuntu音频入门:用arecord/aplay直控声卡硬件
2026/6/16 13:58:21

Ubuntu音频入门:用arecord/aplay直控声卡硬件

1. 项目概述:为什么在Ubuntu里用arecord/aplay做声音处理,比装一堆图形软件更值得花时间刚接触Linux桌面系统的朋友,常会下意识打开“声音设置”点点点,或者去应用商店搜“录音机”“音频播放器”。这没错,但真想搞清楚…

阅读更多
nixified.ai:终极AI项目Nix打包解决方案 - 一键运行70+AI工具
2026/6/16 12:58:21

nixified.ai:终极AI项目Nix打包解决方案 - 一键运行70+AI工具

nixified.ai:终极AI项目Nix打包解决方案 - 一键运行70AI工具 【免费下载链接】flake A Nix flake for many AI projects 项目地址: https://gitcode.com/gh_mirrors/fl/flake nixified.ai 是一个革命性的开源项目,它通过 Nix 打包技术为 AI 开发者…

阅读更多
别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)
2026/6/14 0:57:30

别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)

超越BERT:用Transformers库高效实现文本相似度计算的三种实战方案在自然语言处理领域,文本相似度计算是信息检索、问答系统和推荐系统等应用的核心技术。传统方法如TF-IDF或Word2Vec已逐渐被基于Transformer的预训练模型所取代。Hugging Face的Transform…

阅读更多
Prompt Engineering:重构人机协作的工程化方法论
2026/6/14 0:57:30

Prompt Engineering:重构人机协作的工程化方法论

1. 项目概述:这不是“写提示词”,而是重构人机协作的底层逻辑“Prompt Engineering”这个词,这两年被讲得太多,也太轻飘。很多人把它理解成“给AI发指令的技巧”,甚至简化为“多加几个形容词”“换种说法再试一次”。我…

阅读更多
Anthropic提示层归零:模型即协议的工程实践
2026/6/16 0:39:53

Anthropic提示层归零:模型即协议的工程实践

1. 项目概述:这不是一次普通更新,而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题一出来,我正在调试一个Claude调用链的终端前停了三秒。不是因为震惊,而是因为熟悉&…

阅读更多
2026 AI简历编辑平台深度测评与使用教程:ATS扫描、JD匹配、多版本投递怎么选?(首推 OfferGoose)
2026/6/16 0:57:58

2026 AI简历编辑平台深度测评与使用教程:ATS扫描、JD匹配、多版本投递怎么选?(首推 OfferGoose)

(先给结论,节省时间) 只想最快把简历“拉到及格线更贴JD”:优先从 鹅来面 开始——先做简历评分与岗位匹配度,再按建议改一版可投递稿。投递量很大、需要职位管理:偏向 Teal(职位追踪 多份简历…

阅读更多
Java毕业设计-面向学生竞赛的团队组建与信息管控系统设计 SpringBoot 架构下高校竞赛团队管理系统的设计与实践(源码+LW+部署文档+全bao+远程调试+代码讲解等)
2026/6/16 0:57:58

Java毕业设计-面向学生竞赛的团队组建与信息管控系统设计 SpringBoot 架构下高校竞赛团队管理系统的设计与实践(源码+LW+部署文档+全bao+远程调试+代码讲解等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

阅读更多
Windows内存清理终极指南:Mem Reduct让你的电脑告别卡顿的简单方法
2026/6/16 0:57:58

Windows内存清理终极指南:Mem Reduct让你的电脑告别卡顿的简单方法

Windows内存清理终极指南:Mem Reduct让你的电脑告别卡顿的简单方法 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memre…

阅读更多
GIT修改用户名
2026/6/16 5:55:51

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/15 2:21:34

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/15 21:13:35

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多