Python中用Redis的ZSET实现滑动窗口限流,通过ZREMRANGEBYSCORE清理过期请求、ZADD插入新请求、ZCARD统计数量,并用Lua脚本保证原子性;支持按用户/IP/接口等多维度key设计,辅以降级与监控策略。

Python应用中用Redis实现滑动窗口限流,核心是利用Redis的ZSET(有序集合)按时间戳排序存储请求记录,并通过ZREMRANGEBYSCORE自动清理过期项,再用ZCARD统计当前窗口内请求数。不依赖外部库也能高效完成,关键是设计好时间粒度和key结构。
ZSET的score设为毫秒级时间戳,member可设为唯一标识(如用户ID+时间戳或随机UUID),这样既能去重又能按时间排序。每次请求到来时:
ZREMRANGEBYSCORE key -inf (current_timestamp - window_ms)剔除窗口外的旧记录ZADD key current_timestamp member插入新请求ZCARD key获取当前窗口内请求数,与阈值比对例如:1分钟内最多100次请求,window_ms = 60000,所有score小于time.time()*1000 - 60000的成员都会被自动清理。
直接用全局key会成为瓶颈,应按限流维度构造key,比如:
立即学习“Python免费学习笔记(深入)”;
f"rate_limit:uid:{user_id}"
f"rate_limit:ip:{ip_address}"
f"rate_limit:api:{endpoint}:uid:{user_id}"
注意key生命周期无需手动设置过期——只要窗口内无新请求,ZSET自然变空;也可给key加个较长的EXPIRE(如1小时),防止极端情况下残留空key堆积。
Prisma
Prisma是一款照片编辑工具,用户可以轻松地将照片转换成数字艺术。
92
查看详情
上面三步若拆成多个Redis命令,在高并发下可能因执行间隙导致超限(如A刚删完旧数据、B插入前A又插入一次)。推荐用Lua脚本一次性完成:
local key = KEYS[1]
local now = tonumber(ARGV[1])
local window_ms = tonumber(ARGV[2])
local max_count = tonumber(ARGV[3])
<p>redis.call('zremrangebyscore', key, '-inf', '('..(now - window_ms))
local count = redis.call('zcard', key)
if count < max_count then
redis.call('zadd', key, now, ARGV[4])
return 1
else
return 0
endPython中调用:redis.eval(lua_script, 1, key, now_ms, window_ms, max_count, member_id),返回1表示放行,0表示拒绝。
生产环境别让限流失败直接抛异常:
threading.local或LRU cache),仅限临时兜底ZCARD结果,观察分布是否倾斜INCR计数,便于告警(如5分钟内超1000次触发通知)基本上就这些。滑动窗口比固定窗口更平滑,比漏桶/令牌桶更易理解,用好ZSET和Lua,就能在Python服务里稳稳扛住突发流量。
以上就是Python应用如何实现基于Redis的滑动窗口限流逻辑【技巧】的详细内容,更多请关注其它相关文章!
# 最多
# 娄底网站优化怎么做
# 西湖整合营销推广分析
# 图库网站建设多少钱
# 广州外贸网站seo
# seo发包 吾爱破解
# 微博营销推广的渠道
# 抚顺搜索seo优化服务
# 网站建设时机分析模板
# 盐城seo的优化费用
# 网站建设推广挣钱
# 也能
# 令牌
# python
# 多个
# 如何用
# 再用
# 怎么做
# 设为
# 如何实现
# 多维
# red
# 热点
# win
# redis
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
win11关机几秒又自己开机 Win11关机自动重启问题修复
火狐浏览器如何刷新修复浏览器 火狐浏览器“重置Firefox”功能详解
一加 Ace 6V 快充无法启用_一加 Ace 6V 充电优化
oppo手机如何通过下拉通知栏截图_oppo手机通知栏快捷截图方法
Animex动漫社社登录官网 Animex动漫社资源社入口直达
OPPO手机参数配置如何开启护眼模式_OPPO手机参数配置护眼模式开启指南
喜茶GO更换登录账号方法
高效调试PHP大型嵌套数组:JSON序列化与可视化工具实践
德邦快递会员怎么开通
除了Copilot,还有哪些值得一试的VS Code AI插件?
Leaflet地图弹出窗口图片动态显示:避免缺失图标的专业指南
《杖剑传说》食谱大全
Python模块化编程:避免循环导入与共享函数的最佳实践
传统曲艺莲花落的表演形式是
VB表达式书写规则解析
c++类和对象到底是什么_c++面向对象编程基础
如何在CSS中使用过渡制作按钮边框渐变_border-color transition实现
PointNet++语义分割模型中类别变更引发的断言错误及标签处理策略
5G和6G的连接密度有什么区别 6G每平方公里能连接多少设备
《跳跳舞蹈》循环播放方法
顺丰官方查单号入口 顺丰快递单号查询官网入口
steam缓存文件在哪儿_steam缓存文件的路径查找方法与结构说明
如何用mysql开发用户注册登录功能_mysql用户注册登录数据库设计
顺丰快递怎么查物流_顺丰快递物流信息实时查询操作指南
《大学搜题酱》官网地址登录
c++中的const关键字用法大全_c++ const正确使用指南
优化 React onClick 事件处理:函数引用与箭头函数的对比
Golang如何使用crypto/md5生成哈希_Golang MD5哈希生成方法
知音漫客官网首页入口_知音漫客热门漫画推荐
使用jQuery精确检测除指定元素外任意位置的点击事件
Pydantic 中“schema”字段命名冲突的解决方案
被称为海蜈蚣的海洋动物是
解决Windows上Composer PATH变量冲突导致的命令无法识别问题
J*aScript事件处理:优化键盘输入与表单提交的实践指南
CSS过渡与滚动滚动事件结合应用_scroll与transition动画
盲鳗善于分泌黏液猜猜主要用来做什么
Vue 3中独立响应式实例的创建与应用
手机耗电快是什么原因 延长手机电池续航时间的设置方法【详解】
《下一站江湖2》大雪山加入方法
PHP utf8_encode 字符编码转换陷阱与解决方案
掌握CSS :has() 选择器:父选择器、嵌套限制与常见陷阱解析
Excel怎么用XLOOKUP函数实现双向查找_ExcelXLOOKUP替代VLOOKUP+HLOOKUP的高级用法
VS Code快捷键when上下文子句的妙用
纯CSS实现滚动时动态时间轴线条颜色填充效果
《雷电模拟器》自动点击设置方法
win11如何开启单声道音频 Win11为听障用户合并左右声道【辅助】
Go语言中方法与接收器:指针和值类型的调用机制详解
cad加载的线型看不见怎么办_cad线型不可见问题解决方法
Highcharts雷达图轴线交点数值标注指南
淘口令快速解析技巧
2025-12-20
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。