Files
shaguabijia-app-server/app
zzhyyyyy 0ccbcff2f7 fix(ratelimit): GC 按每个 key 自身窗口判过期,避免短窗口端点误删日闸/登录计数
- 根因:_buckets 全局共享、混着 60s(广告)/3600s(登录)/86400s(日闸)不同窗口的 key;
  原 GC 用「当前调用方的 window_sec」判所有 key 过期,导致高频 60s 广告端点触发 GC 时,
  把本该活 3600s/86400s 的登录/日闸计数一并删掉 → 规模上(超阈值才触发 GC)这些限流被
  反复清零而失效(本系列新增的每日发码上限首当其冲)。
- 修:桶值改存 (start, count, window_sec),GC(_purge_expired)按每个 key 自身窗口判过期;
  顺带把 _hit/_commit 里重复的 GC 抽成一处、阈值提为 _GC_THRESHOLD 常量(仿 sms.py,可测)。
- 测:新增 tests/test_ratelimit.py 覆盖「短窗口 GC 不误删仍在窗口内的长窗口 key」等 3 例。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 19:57:41 +08:00
..
2026-05-31 17:10:16 +08:00