[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-config":3,"article-rate-limit-three-traps":23},{"title":4,"description":5,"logoUrl":6,"icp":6,"contactEmail":6,"footerNote":6,"heroBadge":7,"heroTitle":8,"heroSubtitle":9,"primaryCtaLabel":10,"primaryCtaLink":11,"secondaryCtaLabel":12,"secondaryCtaLink":13,"showArticles":14,"articlesTitle":15,"articlesCount":16,"showProjects":14,"projectsTitle":17,"projectsCount":18,"showPlans":14,"plansTitle":19,"plansNote":20,"ctaTitle":21,"ctaDescription":22},"KeLi API 中转站","AI 中转站主站：知识分享、项目赞助、项目分享与供货商城。","","OpenAI 兼容 · 按次计费","按次计费的 AI 接口中转","一条 Base URL 接多模型上游，额度按天重置、账单按次结算。","查看套餐价格","\u002Fstore","读接入记录","\u002Farticles",true,"最新文章",3,"在做的项目",2,"套餐与价格","按天重置额度，按月计费","付款后自动开通，额度当天生效。","需要先看用法，接入记录里有每一步请求与返回。",{"ok":14,"data":24},{"id":16,"title":25,"slug":26,"summary":27,"coverUrl":28,"authorName":29,"authorAvatarUrl":30,"publishedAt":31,"readingMinutes":32,"tags":33,"views":36,"body":37,"bodyHtml":38,"toc":39,"author":49,"related":51,"updatedAt":64},"限流不是加个计数器：我们踩过的三个坑","rate-limit-three-traps","按 IP 限流会误伤整栋楼、滑动窗口要用哨兵值、限流要能降级。","https:\u002F\u002Fpicsum.photos\u002Fseed\u002Fkeli-limit\u002F1200\u002F675","KeLi",null,"2026-10-26T06:30:00.000Z",7,[34,35],"限流","故障处理",903,"## 坑一：只按 IP 限流\n\n公司出口只有一个 IP，一个人跑脚本，全公司都被挡。**账号为主、IP 为辅**才合理。\n\n## 坑二：固定窗口会「双倍放行」\n\n窗口边界前后各打一次，就能在 2 秒内拿到 2 倍配额。用滑动窗口或令牌桶。\n\n## 坑三：限流组件自己挂了\n\n限流器依赖 Redis，Redis 一抖动，全站 500。**限流必须 fail-open**，宁可多放几个请求。\n\n| 方案 | 误伤 | 精度 | 实现成本 |\n|---|---|---|---|\n| 固定窗口 | 低 | 差 | 低 |\n| 滑动窗口 | 低 | 好 | 中 |\n| 令牌桶 | 低 | 好 | 中 |","\u003Ch2 id=\"坑一-只按-ip-限流\">坑一：只按 IP 限流\u003C\u002Fh2>\n\u003Cp>公司出口只有一个 IP，一个人跑脚本，全公司都被挡。\u003Cstrong>账号为主、IP 为辅\u003C\u002Fstrong>才合理。\u003C\u002Fp>\n\u003Ch2 id=\"坑二-固定窗口会-双倍放行\">坑二：固定窗口会「双倍放行」\u003C\u002Fh2>\n\u003Cp>窗口边界前后各打一次，就能在 2 秒内拿到 2 倍配额。用滑动窗口或令牌桶。\u003C\u002Fp>\n\u003Ch2 id=\"坑三-限流组件自己挂了\">坑三：限流组件自己挂了\u003C\u002Fh2>\n\u003Cp>限流器依赖 Redis，Redis 一抖动，全站 500。\u003Cstrong>限流必须 fail-open\u003C\u002Fstrong>，宁可多放几个请求。\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>方案\u003C\u002Fth>\n\u003Cth>误伤\u003C\u002Fth>\n\u003Cth>精度\u003C\u002Fth>\n\u003Cth>实现成本\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>固定窗口\u003C\u002Ftd>\n\u003Ctd>低\u003C\u002Ftd>\n\u003Ctd>差\u003C\u002Ftd>\n\u003Ctd>低\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>滑动窗口\u003C\u002Ftd>\n\u003Ctd>低\u003C\u002Ftd>\n\u003Ctd>好\u003C\u002Ftd>\n\u003Ctd>中\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>令牌桶\u003C\u002Ftd>\n\u003Ctd>低\u003C\u002Ftd>\n\u003Ctd>好\u003C\u002Ftd>\n\u003Ctd>中\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n",[40,43,46],{"level":18,"id":41,"text":42},"坑一-只按-ip-限流","坑一：只按 IP 限流",{"level":18,"id":44,"text":45},"坑二-固定窗口会-双倍放行","坑二：固定窗口会「双倍放行」",{"level":18,"id":47,"text":48},"坑三-限流组件自己挂了","坑三：限流组件自己挂了",{"id":50,"nickname":29,"avatarUrl":30,"headline":30,"bio":30,"articleCount":16},1,[52,58],{"id":18,"title":53,"slug":54,"summary":55,"readingMinutes":56,"publishedAt":57},"把 API 成本压到 1\u002F4：一条跑通两个月的真实链路","cut-api-cost-to-quarter","三条改动：请求分流、缓存命中、批量合并。附每步的账单对比。",9,"2026-10-28T01:00:00.000Z",{"id":50,"title":59,"slug":60,"summary":61,"readingMinutes":62,"publishedAt":63},"中转站怎么算账：一次请求到底花了多少","how-to-bill-a-request","输入输出分开计价、缓存命中打折、失败请求不计费。三个口径写清楚。",6,"2026-10-22T03:00:00.000Z","2026-10-29T22:26:12.379Z"]