This algorithm divides time into fixed durations/windows. For example each
window is 10 seconds long. When a new request comes in, the current time is used
to determine the window and a counter is increased. If the counter is larger
than the set limit, the request is rejected.
In fixed & sliding window algorithms, the reset time is based on fixed time boundaries (which depend on the period), not on when the first request was made. So two requests made right before the window ends still count toward the current window, and limits reset at the start of the next window.
Builds on top of fixed window but instead of a fixed window, we use a rolling
window. Take this example: We have a rate limit of 10 requests per 1 minute. We
divide time into 1 minute slices, just like in the fixed window algorithm.
Window 1 will be from 00:00:00 to 00:01:00 (HH:MM:SS). Let’s assume it is
currently 00:01:15 and we have received 4 requests in the first window and 5
requests so far in the current window. The approximation to determine if the
request should pass works like this:
limit = 10// 4 request from the old window, weighted + requests in current windowrate = 4 * ((60 - 15) / 60) + 5 = 8return rate < limit // True means we should allow the request
Warning: Using sliding window algorithm with the multiregion setup results in large number of
commands in Redis and long request processing times. If you want to keep the number of commands
low, we recommend using the fixed window algorithm in multi region setup.
const ratelimit = new MultiRegionRatelimit({ redis: [ new Redis({ /* auth */ }), new Redis({ /* auth */ }) ], limiter: MultiRegionRatelimit.slidingWindow(10, "10 s"),});
reset field in the limit and getRemaining methods of sliding window do not
provide an exact reset time. Instead, the reset time is the start time of
the next window.
Consider a bucket filled with {maxTokens} tokens that refills constantly at
{refillRate} per {interval}. Every request will remove one token from the
bucket and if there is no token to take, the request is rejected.
{"docsConfig":{"theme":"mint","$schema":"https://context7.com/schema/docs7.json","name":"Upstash Documentation","colors":{"primary":"#34D399","light":"#34D399","dark":"#34D399"},"logo":{"light":"https://mintcdn.com/upstash/SZOIjPQk26InSWLs/logo/upstash-white-bg.svg?fit=max\u0026auto=format\u0026n=SZOIjPQk26InSWLs\u0026q=85\u0026s=56aeb6475233c7dfc429a6ffe00f4a95","dark":"https://mintcdn.com/upstash/SZOIjPQk26InSWLs/logo/upstash-dark-bg.svg?fit=max\u0026auto=format\u0026n=SZOIjPQk26InSWLs\u0026q=85\u0026s=0b5eb0db0628453848cccc697999d9eb"},"favicon":"https://mintcdn.com/upstash/ZVIIe-nWA4-ORRYS/favicon.png?fit=max\u0026auto=format\u0026n=ZVIIe-nWA4-ORRYS\u0026q=85\u0026s=ddf8a7ac662b007ce4d44a484692430f","navbar":{"links":[{"href":"https://upstash.com/discord","label":"Discord"},{"href":"https://upstash.com/blog","label":"Blog"},{"href":"https://x.com/upstash","label":"Twitter"}],"primary":{"type":"button","label":"Console","href":"https://console.upstash.com"}},"footer":{"socials":{"x":"https://x.com/upstash","github":"https://github.com/upstash","discord":"https://upstash.com/discord"},"links":[{"header":"For AI Agents","items":[{"label":"If you are an AI agent and need a Redis DB to use or experiment with, send a POST request to https://upstash.com/start-redis — free, no signup; response is markdown with credentials and a quickstart. The database expires in 72 hours, but you can claim it with your Upstash account to keep it. Especially useful for AI agents that need scratch storage on the fly. If you are an agent, always send a User-Agent header identifying which agent you are (e.g. claude-code, cursor, codex, opencode) on every request you make to this API.","href":"https://upstash.com/start-redis"}]}]},"seo":{"metatags":{"canonical":"https://upstash.com/docs"},"indexing":"all"},"styling":{"codeblocks":"system","latex":true},"integrations":{"koala":{"publicApiKey":"pk_e4ad10cd00c4309699a780f893358cf99a2f"},"ga4":{"measurementId":"G-ZCGMJW0KFH"},"intercom":{"appId":"rtjkeau6"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"upstash","hasAudioNarration":false,"actualSubdomain":"upstash","customDomains":["upstash.com"],"gitSource":{"type":"github","owner":"upstash","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae511d74729e0ad18e68041","collectionId":"24e78813-2f45-47f5-aa2e-7ee2049705da","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae511d74729e0ad18e68041"},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae511d74729e0ad18e68041","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"API Reference","count":80},{"language":"default","tag":"Developer API","count":80},{"language":"default","tag":"Documentation","count":27},{"language":"default","tag":"Get Started","count":27},{"language":"default","tag":"Redis","count":26},{"language":"default","tag":"Support","count":16},{"language":"default","tag":"DevOps","count":12},{"language":"default","tag":"Terraform","count":11},{"language":"default","tag":"QStash","count":10},{"language":"default","tag":"Vector","count":10}],"searchSettings":{"maxResults":6,"isFiltersEnabled":false}},"assistantConfig":{},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":false}},"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#intro-video{aspect-ratio:16/9;width:100%;max-width:720px;height:auto;border-radius:8px;margin:2rem auto}@container (max-width: 720px){#intro-video{width:100%;margin:1rem auto}}.u-wrap{--u-inset:1.5rem;box-sizing:content-box;max-width:63.75rem;padding:0 var(--u-inset) 6rem}html[data-current-path=\"/introduction\"] #content-side-layout{width:0!important;min-width:0!important;max-width:0!important;overflow:hidden!important}html[data-current-path=\"/introduction\"] #content-area{width:100%!important}#content[data-page-href=\"/introduction\"],#content[data-page-href=\"/src/_props/introduction\"]{min-height:100vh}.u-hero{padding:3.125rem 0 0}.u-hero h1{font-size:2.5rem;line-height:1.2;font-weight:600;letter-spacing:0;margin:0}.u-hero p{margin:.5rem 0 0;max-width:34.5rem;font-size:1.125rem;line-height:1.5;color:#737373}.dark .u-hero p{color:#a3a3a3}.u-card__title,.u-hero h1,.u-section h2{color:#262626}.dark .u-card__title,.dark .u-hero h1,.dark .u-section h2{color:#f4f5f6}.u-actions{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:1.5rem}.u-action{display:inline-flex;align-items:center;justify-content:center;gap:.625rem;height:2.625rem;min-height:2.625rem;padding:0 1.25rem;border:1px solid transparent;border-radius:2.5rem;font-family:inherit;font-weight:400;font-size:.9375rem;line-height:1;text-decoration:none;box-shadow:0 1px 2px rgba(0,0,0,.06);transition:background .15s ease,border-color .15s ease,color .15s ease}.u-action:focus-visible{outline:2px solid #10b981;outline-offset:2px}.u-action--primary{background:#262626;color:#fff}.u-action--primary:hover{background:#27272a}.dark .u-action--primary{background:#f4f4f5;color:#18181b}.dark .u-action--primary:hover{background:#e4e4e7}.u-command,.u-prompt-action .prompt button:hover{background:#fafafa;box-shadow:0 1px 2px rgba(0,0,0,.06)}.u-command,.u-prompt-action .prompt button{height:2.625rem;border:1px solid #e5e5e5;border-radius:2.5rem}.u-command{display:inline-flex;align-items:center;gap:.75rem;padding:0 1.125rem}.dark .u-command{border-color:rgba(255,255,255,.16);background:rgba(255,255,255,.06);box-shadow:0 1px 2px rgba(0,0,0,.2)}.u-command__copy,.u-command__copy>*{margin:0!important}.u-command__copy .code-block,.u-command__copy .code-surface{margin:0!important;padding:0!important;border:0!important;background:0 0!important;box-shadow:none!important}.u-command__copy .code-scroll,.u-command__copy pre{display:none!important}.u-command__copy .code-chip{position:static!important;background:0 0!important;backdrop-filter:none!important}.u-command__text{font-family:var(--font-mono, ui-monospace, SFMono-Regular, Menlo, monospace);font-size:.9375rem;color:#262626;white-space:nowrap}.dark .u-command__text{color:#f4f4f5}.u-command__dollar{color:#10b981}.u-command__link{padding-left:.75rem;border-left:1px solid #e5e5e5;font-size:.9375rem;line-height:1.25rem;color:#262626!important;text-decoration:underline;text-underline-offset:.3rem;text-decoration-color:rgba(0,0,0,.3);white-space:nowrap}.u-command__link:hover{text-decoration-color:currentColor}.dark .u-command__link{border-left-color:rgba(255,255,255,.16);color:#f4f4f5!important;text-decoration-color:rgba(255,255,255,.4)}.u-hero p.u-hero__hint{margin-top:.75rem;font-size:.875rem;color:#8a8a8a}.dark .u-hero p.u-hero__hint{color:#8b8b8b}.u-prompt-action .prompt{position:absolute;inset:0;overflow:hidden;width:100%;height:100%;margin:0;padding:0;background:0 0}.u-prompt-action .prompt>div+div{display:none}.u-prompt-action .prompt button{position:absolute;z-index:2;inset:0;justify-content:flex-end;width:13.125rem;min-height:2.625rem;padding:0 1.25rem 0 6rem;font-size:.9375rem;font-weight:400;line-height:1;color:#262626;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.06)}.u-prompt-action .prompt button:hover{color:#262626;border-color:#d4d4d4}.dark .u-prompt-action .prompt button{color:#f4f4f5;background:0 0;border-color:rgba(255,255,255,.16);box-shadow:0 1px 2px rgba(0,0,0,.2)}.dark .u-prompt-action .prompt button:hover{color:#fff;background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.24);box-shadow:0 1px 2px rgba(0,0,0,.2)}.u-prompt-action{position:relative;width:13.125rem;height:2.625rem}.u-prompt-action .prompt button>span:has(svg){display:none}.u-prompt-tools{position:absolute;z-index:3;top:.3125rem;left:.375rem;display:flex;width:5rem;height:2rem;pointer-events:none}.u-prompt-tool{display:grid;flex:none;width:2rem;height:2rem;padding:.25rem;place-items:center;border:1px solid rgba(0,0,0,.1);border-radius:9999px;color:#262626;background:#fff}.u-prompt-tool+.u-prompt-tool{margin-left:-.5rem}.u-prompt-tool svg{width:1.375rem;height:1.375rem}.dark .u-prompt-tool{border-color:rgba(255,255,255,.16);color:#f4f4f5;background:#18181b}.u-section{margin-top:4rem}.u-section--divider{padding-top:4rem;border-top:1px solid #e5e5e5}.dark .u-section--divider{border-top-color:#27272a}.u-section h2{font-size:1.5rem;line-height:1.3;font-weight:600;letter-spacing:0;margin:0}.u-section .u-sub{display:block;margin:.25rem 0 0;color:#737373;font-size:.9375rem;line-height:1.7}.dark .u-section .u-sub{color:#a3a3a3}.u-section .u-sub a{color:inherit;font-weight:500;text-decoration:underline;text-underline-offset:2px}.u-section .u-sub a:hover{color:#059669}.dark .u-section .u-sub a:hover{color:#34d399}.u-grid{display:grid;gap:1rem;margin-top:1.5rem;grid-template-columns:repeat(1,minmax(0,1fr))}.u-grid--2{grid-template-columns:repeat(auto-fill,minmax(18rem,1fr))}.u-grid--3{grid-template-columns:repeat(auto-fill,minmax(15rem,1fr))}.u-grid--fixed2{grid-template-columns:repeat(2,minmax(0,1fr))}.u-grid--fixed3{grid-template-columns:repeat(3,minmax(0,1fr))}.u-grid--fixed4{grid-template-columns:repeat(4,minmax(0,1fr))}@media (max-width:900px){.u-grid--fixed3,.u-grid--fixed4{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:560px){.u-grid--fixed2,.u-grid--fixed3,.u-grid--fixed4{grid-template-columns:1fr}}.u-card{display:flex;gap:.9rem;align-items:flex-start;padding:1.1rem;border-radius:.9rem;border:1px solid rgba(0,0,0,.08);background:#fff;text-decoration:none;color:inherit;transition:border-color .15s ease}.dark .u-card{border-color:rgba(255,255,255,.1);background:rgba(255,255,255,.03)}.u-card:hover{border-color:#d4d4d4}.dark .u-card:hover{border-color:#52525b}.u-card--static:hover{border-color:rgba(0,0,0,.08)}.dark .u-card--static:hover{border-color:rgba(255,255,255,.1)}.u-card__icon{flex:none;width:2.25rem;height:2.25rem;border-radius:.55rem;margin:0!important;align-self:flex-start;pointer-events:none}.u-card__icon--muted{display:flex;align-items:center;justify-content:center;color:var(--primary);background:color-mix(in srgb,var(--primary) 10%,transparent)}.dark .u-card__icon--muted{color:var(--primary-light);background:color-mix(in srgb,var(--primary-light) 10%,transparent)}.u-card__lang-icon{width:1.5rem;height:1.5rem}.u-card__icon--brand{width:2rem;height:2rem;border-radius:0;align-self:center;display:flex;align-items:center;justify-content:center;background:0 0}.u-card__body{min-width:0}.u-card__title{font-weight:600;font-size:.95rem;line-height:1.3}.u-card__desc{margin-top:.2rem;font-size:.85rem;line-height:1.4;color:#626d7a}.dark .u-card__desc{color:#aab2bf}.u-product .u-card__icon{width:2rem;height:2rem;border-radius:0;align-self:center}.u-community,.u-product,.u-tool{min-height:5.125rem;align-items:center;gap:1rem;padding:1.25rem 1.5rem;border:1px solid #e5e5e5;border-radius:1.25rem;background:#fafafa;box-shadow:0 1px 2px rgba(0,0,0,.06)}.u-community .u-card__title,.u-product .u-card__title,.u-tool .u-card__title{font-size:1.0625rem;line-height:1.3;font-weight:600}.u-community .u-card__desc,.u-product .u-card__desc,.u-tool .u-card__desc{margin-top:0;font-size:.8125rem;line-height:1.4;color:#737373}.dark .u-community,.dark .u-product,.dark .u-tool{border-color:#3f3f46;background:rgba(255,255,255,.04)}.dark .u-community .u-card__desc,.dark .u-product .u-card__desc,.dark .u-tool .u-card__desc{color:#a3a3a3}.u-console{margin-top:1.5rem;border-radius:1rem;border:1px solid rgba(0,0,0,.08);overflow:hidden;background:#f7f8fa}.dark .u-console{border-color:rgba(255,255,255,.1);background:rgba(255,255,255,.02)}.u-console img{display:block;width:100%;height:13rem;object-fit:cover;object-position:top center}.u-console__cap{padding:.75rem 1rem;font-size:.85rem;color:#626d7a;border-top:1px solid rgba(0,0,0,.06)}.dark .u-console__cap{color:#98a2b3;border-top-color:rgba(255,255,255,.08)}.u-agents{margin:1.5rem 0 2rem}.u-card--stack{flex-direction:column;gap:.55rem;padding:1rem}.u-card__head{display:flex;align-items:center;gap:.6rem}.u-card__brand-icon{flex:none;display:flex;align-items:center;justify-content:center;color:#18181b}.dark .u-card__brand-icon{color:#fafafa}.u-card__brand-icon,.u-card__brand-icon svg{width:1.25rem;height:1.25rem}.u-card--stack{color:#111827!important;text-decoration:none!important;border-bottom-width:1px!important}.dark .u-card--stack{color:#f9fafb!important}.u-card--stack .u-card__desc{font-size:.85rem;line-height:1.45;height:calc(.85rem*1.45*3);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.u-agent-setup{margin:0 0 1.5rem;align-items:center}"}],"page":{"pagePath":"redis/sdks/ratelimit-ts/algorithms","slug":"/redis/sdks/ratelimit-ts/algorithms","pageMetadata":{"title":"Ratelimit TypeScript SDK Algorithms","sidebarTitle":"Ratelimiting Algorithms","description":null,"href":"/redis/sdks/ratelimit-ts/algorithms"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Tab,Tabs,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`We provide different algorithms to use out of the box. Each has pros and cons.`}),`\n`,_jsx(Heading,{level:`2`,id:`fixed-window`,children:`Fixed Window`}),`\n`,_jsx(_components.p,{children:`This algorithm divides time into fixed durations/windows. For example each\nwindow is 10 seconds long. When a new request comes in, the current time is used\nto determine the window and a counter is increased. If the counter is larger\nthan the set limit, the request is rejected.`}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`In fixed \u0026 sliding window algorithms, the reset time is based on fixed time boundaries (which depend on the period), not on when the first request was made. So two requests made right before the window ends still count toward the current window, and limits reset at the start of the next window.`})}),`\n`,_jsx(Heading,{level:`3`,id:`pros`,children:`Pros`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Very cheap in terms of data size and computation`}),`\n`,_jsx(_components.li,{children:`Newer requests are not starved due to a high burst in the past`}),`\n`,_jsxs(_components.li,{children:[`Supports `,_jsx(_components.a,{href:`/redis/sdks/ratelimit-ts/features#dynamic-limits`,children:`dynamic limits`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`cons`,children:`Cons`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Can cause high bursts at the window boundaries to leak through`}),`\n`,_jsx(_components.li,{children:`Causes request stampedes if many users are trying to access your server,\nwhenever a new window begins`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`usage`,children:`Usage`}),`\n`,_jsx(_components.p,{children:`Create a new ratelimiter, that allows 10 requests per 10 seconds.`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Regional`,id:`regional`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` ratelimit`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Ratelimit`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` redis:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Redis`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`fromEnv`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` limiter:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Ratelimit`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`fixedWindow`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`10`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"10 s\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})})}),_jsx(Tab,{title:`Multi Regional`,id:`multi-regional`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` ratelimit`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` MultiRegionRatelimit`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` redis:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Redis`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` /* auth */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }),`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Redis`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` /* auth */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` })`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` limiter:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` MultiRegionRatelimit`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`fixedWindow`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`10`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"10 s\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})})})]}),`\n`,_jsx(Heading,{level:`2`,id:`sliding-window`,children:`Sliding Window`}),`\n`,_jsx(_components.p,{children:`Builds on top of fixed window but instead of a fixed window, we use a rolling\nwindow. Take this example: We have a rate limit of 10 requests per 1 minute. We\ndivide time into 1 minute slices, just like in the fixed window algorithm.\nWindow 1 will be from 00:00:00 to 00:01:00 (HH:MM:SS). Let’s assume it is\ncurrently 00:01:15 and we have received 4 requests in the first window and 5\nrequests so far in the current window. The approximation to determine if the\nrequest should pass works like this:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`limit`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 10`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// 4 request from the old window, weighted + requests in current window`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`rate`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 4`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` *`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ((`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`60`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` -`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 15`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 60`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`+`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 5`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 8`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` rate`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` limit`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // True means we should allow the request`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`pros-2`,children:`Pros`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Solves the issue near boundary from fixed window.`}),`\n`,_jsxs(_components.li,{children:[`Supports `,_jsx(_components.a,{href:`/redis/sdks/ratelimit-ts/features#dynamic-limits`,children:`dynamic limits`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`cons-2`,children:`Cons`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`More expensive in terms of storage and computation`}),`\n`,_jsx(_components.li,{children:`Is only an approximation, because it assumes a uniform request flow in the\nprevious window, but this is fine in most cases`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`usage-2`,children:`Usage`}),`\n`,_jsx(_components.p,{children:`Create a new ratelimiter, that allows 10 requests per 10 seconds.`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Regional`,id:`regional-2`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` ratelimit`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Ratelimit`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` redis:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Redis`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`fromEnv`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` limiter:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Ratelimit`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`slidingWindow`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`10`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"10 s\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})})}),_jsxs(Tab,{title:`Multi Regional`,id:`multi-regional-2`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Warning:`}),` Using sliding window algorithm with the multiregion setup results in large number of\ncommands in Redis and long request processing times. If you want to keep the number of commands\nlow, we recommend using the `,_jsx(_components.a,{href:`/redis/sdks/ratelimit-ts/algorithms#fixed-window`,children:`fixed window algorithm in multi region setup`}),`.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` ratelimit`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` MultiRegionRatelimit`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` redis:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Redis`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` /* auth */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }),`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Redis`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` /* auth */`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` })`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` limiter:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` MultiRegionRatelimit`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`slidingWindow`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`10`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"10 s\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})})]})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`reset`}),` field in the `,_jsx(_components.a,{href:`/redis/sdks/ratelimit-ts/methods#limit`,children:_jsx(_components.code,{children:`limit`})}),` and `,_jsx(_components.a,{href:`/redis/sdks/ratelimit-ts/methods#getremaining`,children:_jsx(_components.code,{children:`getRemaining`})}),` methods of sliding window do not\nprovide an exact reset time. Instead, the reset time is the start time of\nthe next window.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`token-bucket`,children:`Token Bucket`}),`\n`,_jsxs(_components.p,{children:[`Consider a bucket filled with `,_jsx(_components.code,{children:`{maxTokens}`}),` tokens that refills constantly at\n`,_jsx(_components.code,{children:`{refillRate}`}),` per `,_jsx(_components.code,{children:`{interval}`}),`. Every request will remove one token from the\nbucket and if there is no token to take, the request is rejected.`]}),`\n`,_jsx(Heading,{level:`3`,id:`pros-3`,children:`Pros`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Bursts of requests are smoothed out and you can process them at a constant\nrate.`}),`\n`,_jsxs(_components.li,{children:[`Allows to set a higher initial burst limit by setting `,_jsx(_components.code,{children:`maxTokens`}),` higher than\n`,_jsx(_components.code,{children:`refillRate`})]}),`\n`,_jsxs(_components.li,{children:[`Supports `,_jsx(_components.a,{href:`/redis/sdks/ratelimit-ts/features#dynamic-limits`,children:`dynamic limits`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`cons-3`,children:`Cons`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Expensive in terms of computation`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`usage-3`,children:`Usage`}),`\n`,_jsx(_components.p,{children:`Create a new bucket, that refills 5 tokens every 10 seconds and has a maximum\nsize of 10.`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Regional`,id:`regional-3`,children:_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` ratelimit`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Ratelimit`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` redis:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Redis`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`fromEnv`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` limiter:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Ratelimit`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`tokenBucket`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"10 s\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`10`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` analytics:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})})}),_jsx(Tab,{title:`Multi Regional`,id:`multi-regional-3`,children:_jsx(_components.p,{children:_jsxs(_components.em,{children:[`Not yet supported for `,_jsx(_components.code,{children:`MultiRegionRatelimit`})]})})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Ratelimit TypeScript SDK Algorithms","sidebarTitle":"Ratelimiting Algorithms","description":null,"href":"/redis/sdks/ratelimit-ts/algorithms"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Fixed Window","slug":"fixed-window","depth":2,"children":[{"title":"Pros","slug":"pros","depth":3,"children":[]},{"title":"Cons","slug":"cons","depth":3,"children":[]},{"title":"Usage","slug":"usage","depth":3,"children":[]}]},{"title":"Sliding Window","slug":"sliding-window","depth":2,"children":[{"title":"Pros","slug":"pros-2","depth":3,"children":[]},{"title":"Cons","slug":"cons-2","depth":3,"children":[]},{"title":"Usage","slug":"usage-2","depth":3,"children":[]}]},{"title":"Token Bucket","slug":"token-bucket","depth":2,"children":[{"title":"Pros","slug":"pros-3","depth":3,"children":[]},{"title":"Cons","slug":"cons-3","depth":3,"children":[]},{"title":"Usage","slug":"usage-3","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"subdomain":"upstash","siteName":"Upstash Documentation","title":"Ratelimit TypeScript SDK Algorithms - Upstash Documentation","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-30T21:53:50.480Z","originalFileLocation":"redis/sdks/ratelimit-ts/algorithms.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"Upstash Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/upstash/9uICcBAD65N37Ou0/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/upstash/9uICcBAD65N37Ou0/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/upstash/9uICcBAD65N37Ou0/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/upstash/9uICcBAD65N37Ou0/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/upstash/9uICcBAD65N37Ou0/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/upstash/9uICcBAD65N37Ou0/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/upstash/9uICcBAD65N37Ou0/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/upstash/9uICcBAD65N37Ou0/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/upstash/9uICcBAD65N37Ou0/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Ratelimit TypeScript SDK Algorithms - Upstash Documentation\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Upstash Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://upstash.com/docs/redis/sdks/ratelimit-ts/algorithms\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://upstash.mintlify.app/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Ratelimit+TypeScript+SDK+Algorithms\u0026amp;theme=80d19610e47a0e6627356fe0\u0026amp;signature=c09011a506119525e5ccf86c2d6c02f1c03d2253170cd01e13c5ceb82dd08fa6\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Ratelimit TypeScript SDK Algorithms - Upstash Documentation\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://upstash.mintlify.app/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Ratelimit+TypeScript+SDK+Algorithms\u0026amp;theme=80d19610e47a0e6627356fe0\u0026amp;signature=c09011a506119525e5ccf86c2d6c02f1c03d2253170cd01e13c5ceb82dd08fa6\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/upstash/9uICcBAD65N37Ou0/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Upstash Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#34D399\">\u003clink data-mint-head rel=\"canonical\" href=\"https://upstash.com/docs/redis/sdks/ratelimit-ts/algorithms\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/redis/sdks/ratelimit-ts/algorithms.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://upstash.com/#organization\",\"name\":\"Upstash Documentation\",\"url\":\"https://upstash.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/upstash/SZOIjPQk26InSWLs/logo/upstash-white-bg.svg?fit=max\u0026auto=format\u0026n=SZOIjPQk26InSWLs\u0026q=85\u0026s=56aeb6475233c7dfc429a6ffe00f4a95\"}},{\"@type\":\"WebSite\",\"@id\":\"https://upstash.com/docs#website\",\"name\":\"Upstash Documentation\",\"url\":\"https://upstash.com/docs\",\"publisher\":{\"@id\":\"https://upstash.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://upstash.com/docs/redis/sdks/ratelimit-ts/algorithms#webpage\",\"url\":\"https://upstash.com/docs/redis/sdks/ratelimit-ts/algorithms\",\"name\":\"Ratelimit TypeScript SDK Algorithms\",\"dateModified\":\"2026-10-30T21:53:50.480Z\",\"isPartOf\":{\"@id\":\"https://upstash.com/docs#website\"}},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://upstash.com/docs/redis/sdks/ratelimit-ts/algorithms#article\",\"headline\":\"Ratelimit TypeScript SDK Algorithms\",\"name\":\"Ratelimit TypeScript SDK Algorithms\",\"url\":\"https://upstash.com/docs/redis/sdks/ratelimit-ts/algorithms\",\"mainEntityOfPage\":{\"@id\":\"https://upstash.com/docs/redis/sdks/ratelimit-ts/algorithms#webpage\"},\"dateModified\":\"2026-10-30T21:53:50.480Z\",\"publisher\":{\"@id\":\"https://upstash.com/#organization\"},\"isPartOf\":{\"@id\":\"https://upstash.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Upstash Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Upstash Documentation","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Get Started","pages":[{"title":"Overview","mode":"frame","href":"/introduction"},{"group":"Agent Setup","pages":[{"title":"AI Tools","sidebarTitle":"Overview","href":"/agent-resources/overview"},{"title":"Install by agent","sidebarTitle":"Clients","href":"/agent-resources/clients"},{"title":"MCP Server","href":"/agent-resources/mcp"},{"title":"CLI","href":"/agent-resources/cli"},{"title":"Upstash Agent Skills","sidebarTitle":"Skills","href":"/agent-resources/skills"},{"title":"llms.txt","url":"https://upstash.com/docs/llms.txt","href":"/agent-resources/llms-txt"}]},{"group":"Concepts","pages":[{"title":"Serverless","href":"/common/concepts/serverless"},{"title":"Scale to Zero","href":"/common/concepts/scale-to-zero"},{"title":"Global Replication","href":"/common/concepts/global-replication"},{"title":"Access Anywhere","href":"/common/concepts/access-anywhere"}]},{"group":"Support","pages":[{"group":"Account \u0026 Teams","pages":[{"title":"Create an Account","href":"/common/account/createaccount"},{"title":"Teams and Users","href":"/common/account/teams"},{"title":"Developer API","href":"/common/account/developerapi"},{"title":"Add a Payment Method","href":"/common/account/add-payment-method"},{"title":"AWS Marketplace","href":"/common/account/awsmarketplace"},{"title":"Cost Explorer","href":"/common/account/costexplorer"},{"title":"Payment History","href":"/common/account/paymenthistory"},{"title":"Audit Logs","href":"/common/account/auditlogs"},{"title":"Account and Billing FAQ","href":"/common/account/faq"}]},{"title":"Support \u0026 Contact Us","href":"/common/help/support"},{"title":"Feature Requests","href":"/common/help/feature-requests"},{"title":"Professional Support","href":"/common/help/prosupport"},{"title":"Uptime SLA","href":"/common/help/sla"},{"title":"Uptime Monitor","href":"/common/help/uptime"},{"title":"Legal","href":"/common/help/legal"},{"title":"Compliance","href":"/common/help/compliance"}]}]}]},{"tab":"API Reference","groups":[{"group":"Developer API","pages":[{"title":"Upstash Developer API Getting Started","sidebarTitle":"Getting Started","href":"/devops/developer-api/introduction"},{"title":"Authentication","href":"/devops/developer-api/authentication"},{"title":"HTTP Status Codes","href":"/devops/developer-api/http_status_codes"},{"group":"Redis","pages":[{"title":"List Databases","deprecated":null,"version":null,"sidebarTitle":"List databases","openapi":"/devops/developer-api/openapi.yaml get /redis/databases","href":"/devops/developer-api/redis/list_databases"},{"title":"Get Database","deprecated":null,"version":null,"sidebarTitle":"Get database","openapi":"/devops/developer-api/openapi.yaml get /redis/database/{id}","href":"/devops/developer-api/redis/get_database"},{"title":"Get Database Stats","deprecated":null,"version":null,"sidebarTitle":"Get database stats","openapi":"/devops/developer-api/openapi.yaml get /redis/stats/{id}","href":"/devops/developer-api/redis/get_database_stats"},{"title":"Get Database Traffic","deprecated":null,"version":null,"sidebarTitle":"Get database traffic","openapi":"/devops/developer-api/openapi.yaml get /redis/traffic/{id}","href":"/devops/developer-api/redis/get_database_traffic"},{"title":"Get Database Insights","deprecated":null,"version":null,"sidebarTitle":"Get database insights","openapi":"/devops/developer-api/openapi.yaml get /redis/insights/{id}","href":"/devops/developer-api/redis/get_database_insights"},{"title":"Create Redis Database","deprecated":null,"version":null,"sidebarTitle":"Create database global","openapi":"/devops/developer-api/openapi.yaml post /redis/database","href":"/devops/developer-api/redis/create_database_global"},{"title":"Rename Database","deprecated":null,"version":null,"sidebarTitle":"Rename database","openapi":"/devops/developer-api/openapi.yaml post /redis/rename/{id}","href":"/devops/developer-api/redis/rename_database"},{"title":"Reset Password","deprecated":null,"version":null,"sidebarTitle":"Reset password","openapi":"/devops/developer-api/openapi.yaml post /redis/reset-password/{id}","href":"/devops/developer-api/redis/reset_password"},{"title":"Enable TLS","deprecated":null,"version":null,"sidebarTitle":"Enable tls","openapi":"/devops/developer-api/openapi.yaml post /redis/enable-tls/{id}","href":"/devops/developer-api/redis/enable_tls"},{"title":"Enable Eviction","deprecated":null,"version":null,"sidebarTitle":"Enable eviction","openapi":"/devops/developer-api/openapi.yaml post /redis/enable-eviction/{id}","href":"/devops/developer-api/redis/enable_eviction"},{"title":"Disable Eviction","deprecated":null,"version":null,"sidebarTitle":"Disable eviction","openapi":"/devops/developer-api/openapi.yaml post /redis/disable-eviction/{id}","href":"/devops/developer-api/redis/disable_eviction"},{"title":"Enable Auto Upgrade","deprecated":null,"version":null,"sidebarTitle":"Enable autoscaling","openapi":"/devops/developer-api/openapi.yaml post /redis/enable-autoupgrade/{id}","href":"/devops/developer-api/redis/enable_autoscaling"},{"title":"Disable Auto Upgrade","deprecated":null,"version":null,"sidebarTitle":"Disable autoscaling","openapi":"/devops/developer-api/openapi.yaml post /redis/disable-autoupgrade/{id}","href":"/devops/developer-api/redis/disable_autoscaling"},{"title":"Change Database Plan","deprecated":null,"version":null,"sidebarTitle":"Change plan","openapi":"/devops/developer-api/openapi.yaml post /redis/{id}/change-plan","href":"/devops/developer-api/redis/change_plan"},{"title":"Update Regions","deprecated":null,"version":null,"sidebarTitle":"Update regions","openapi":"/devops/developer-api/openapi.yaml post /redis/update-regions/{id}","href":"/devops/developer-api/redis/update_regions"},{"title":"Move To Team","deprecated":null,"version":null,"sidebarTitle":"Moveto team","openapi":"/devops/developer-api/openapi.yaml post /redis/move-to-team","href":"/devops/developer-api/redis/moveto_team"},{"title":"Update Database Budget","deprecated":null,"version":null,"sidebarTitle":"Update budget","openapi":"/devops/developer-api/openapi.yaml patch /redis/update-budget/{id}","href":"/devops/developer-api/redis/update_budget"},{"title":"Delete Database","deprecated":null,"version":null,"sidebarTitle":"Delete database","openapi":"/devops/developer-api/openapi.yaml delete /redis/database/{id}","href":"/devops/developer-api/redis/delete_database"},{"group":"Backup","pages":[{"title":"List Backup","deprecated":null,"version":null,"sidebarTitle":"List backup","openapi":"/devops/developer-api/openapi.yaml get /redis/list-backup/{id}","href":"/devops/developer-api/redis/backup/list_backup"},{"title":"Get Backup Analysis","deprecated":null,"version":null,"sidebarTitle":"Get backup analysis","openapi":"/devops/developer-api/openapi.yaml get /redis/backup-analysis/{id}/{backupid}","href":"/devops/developer-api/redis/backup/get_backup_analysis"},{"title":"Analyze Backup","deprecated":null,"version":null,"sidebarTitle":"Analyze backup","openapi":"/devops/developer-api/openapi.yaml post /redis/backup-analysis/{id}/{backupid}","href":"/devops/developer-api/redis/backup/analyze_backup"},{"title":"Create Backup","deprecated":null,"version":null,"sidebarTitle":"Create backup","openapi":"/devops/developer-api/openapi.yaml post /redis/create-backup/{id}","href":"/devops/developer-api/redis/backup/create_backup"},{"title":"Restore Backup","deprecated":null,"version":null,"sidebarTitle":"Restore backup","openapi":"/devops/developer-api/openapi.yaml post /redis/restore-backup/{id}","href":"/devops/developer-api/redis/backup/restore_backup"},{"title":"Enable Daily Backup","deprecated":null,"version":null,"sidebarTitle":"Enable dailybackup","openapi":"/devops/developer-api/openapi.yaml patch /redis/enable-dailybackup/{id}","href":"/devops/developer-api/redis/backup/enable_dailybackup"},{"title":"Disable Daily Backup","deprecated":null,"version":null,"sidebarTitle":"Disable dailybackup","openapi":"/devops/developer-api/openapi.yaml patch /redis/disable-dailybackup/{id}","href":"/devops/developer-api/redis/backup/disable_dailybackup"},{"title":"Delete Backup","deprecated":null,"version":null,"sidebarTitle":"Delete backup","openapi":"/devops/developer-api/openapi.yaml delete /redis/delete-backup/{id}/{backup_id}","href":"/devops/developer-api/redis/backup/delete_backup"}]}]},{"group":"Redis for Agents","pages":[{"title":"Get Instructions","api":"GET https://upstash.com/start-redis","href":"/devops/developer-api/start-redis/instructions"},{"title":"Create a Free Database","api":"POST https://upstash.com/start-redis","href":"/devops/developer-api/start-redis/create"},{"title":"Get Metrics","api":"GET https://upstash.com/start-redis/metrics/{id}","href":"/devops/developer-api/start-redis/metrics"}]},{"group":"Vector","pages":[{"title":"List Indices","deprecated":null,"version":null,"sidebarTitle":"List indices","openapi":"/devops/developer-api/openapi.yaml get /vector/index","href":"/devops/developer-api/vector/list_indices"},{"title":"Get Index","deprecated":null,"version":null,"sidebarTitle":"Get index","openapi":"/devops/developer-api/openapi.yaml get /vector/index/{id}","href":"/devops/developer-api/vector/get_index"},{"title":"Get Index Stats","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml get /vector/index/{id}/stats","href":"/api-reference/vector/get-index-stats"},{"title":"Get Vector Stats","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml get /vector/index/stats","href":"/api-reference/vector/get-vector-stats"},{"title":"Create Index","deprecated":null,"version":null,"sidebarTitle":"Create index","openapi":"/devops/developer-api/openapi.yaml post /vector/index","href":"/devops/developer-api/vector/create_index"},{"title":"Rename Index","deprecated":null,"version":null,"sidebarTitle":"Rename index","openapi":"/devops/developer-api/openapi.yaml post /vector/index/{id}/rename","href":"/devops/developer-api/vector/rename_index"},{"title":"Reset Index Passwords","deprecated":null,"version":null,"sidebarTitle":"Reset index passwords","openapi":"/devops/developer-api/openapi.yaml post /vector/index/{id}/reset-password","href":"/devops/developer-api/vector/reset_index_passwords"},{"title":"Set Index Plan","deprecated":null,"version":null,"sidebarTitle":"Set index plan","openapi":"/devops/developer-api/openapi.yaml post /vector/index/{id}/setplan","href":"/devops/developer-api/vector/set_index_plan"},{"title":"Transfer Index","deprecated":null,"version":null,"sidebarTitle":"Transfer index","openapi":"/devops/developer-api/openapi.yaml post /vector/index/{id}/transfer","href":"/devops/developer-api/vector/transfer_index"},{"title":"Delete Index","deprecated":null,"version":null,"sidebarTitle":"Delete index","openapi":"/devops/developer-api/openapi.yaml delete /vector/index/{id}","href":"/devops/developer-api/vector/delete_index"}]},{"group":"Search","pages":[{"title":"List Search Indexes","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml get /search","href":"/api-reference/search/list-search-indexes"},{"title":"Get Search Index","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml get /search/{id}","href":"/api-reference/search/get-search-index"},{"title":"Get Search Stats","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml get /search/stats","href":"/api-reference/search/get-search-stats"},{"title":"Get Index Stats","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml get /search/{id}/stats","href":"/api-reference/search/get-index-stats"},{"title":"Create Search Index","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml post /search","href":"/api-reference/search/create-search-index"},{"title":"Reset Password","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml post /search/{id}/reset-password","href":"/api-reference/search/reset-password"},{"title":"Transfer Search Index","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml post /search/{id}/transfer","href":"/api-reference/search/transfer-search-index"},{"title":"Rename Search Index","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml post /search/{id}/rename","href":"/api-reference/search/rename-search-index"},{"title":"Delete Search Index","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml delete /search/{id}","href":"/api-reference/search/delete-search-index"}]},{"group":"QStash","pages":[{"title":"List QStash Users","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml get /qstash/users","href":"/api-reference/qstash/list-qstash-users"},{"title":"Get QStash","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml get /qstash/user/{id}","href":"/api-reference/qstash/get-qstash"},{"title":"Get QStash Stats","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml get /qstash/stats/{id}","href":"/api-reference/qstash/get-qstash-stats"},{"title":"Get QStash IPv4 Addresses","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml get /qstash/ipv4","href":"/api-reference/qstash/get-qstash-ipv4-addresses"},{"title":"Reset QStash Token","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml post /qstash/rotate-token/{id}","href":"/api-reference/qstash/reset-qstash-token"},{"title":"Set QStash Plan","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml post /qstash/set-plan/{id}","href":"/api-reference/qstash/set-qstash-plan"},{"title":"Move QStash to Team","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml post /qstash/move-to-team","href":"/api-reference/qstash/move-qstash-to-team"},{"title":"Update QStash Budget","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml patch /qstash/update-budget/{id}","href":"/api-reference/qstash/update-qstash-budget"},{"title":"Enable Production Pack","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml post /qstash/enable-prodpack/{id}","href":"/api-reference/qstash/enable-production-pack"},{"title":"Disable Production Pack","deprecated":null,"version":null,"openapi":"/devops/developer-api/openapi.yaml post /qstash/disable-prodpack/{id}","href":"/api-reference/qstash/disable-production-pack"}]},{"group":"Teams","pages":[{"title":"List Teams","deprecated":null,"version":null,"sidebarTitle":"List teams","openapi":"/devops/developer-api/openapi.yaml get /teams","href":"/devops/developer-api/teams/list_teams"},{"title":"Get Team Members","deprecated":null,"version":null,"sidebarTitle":"Get team members","openapi":"/devops/developer-api/openapi.yaml get /teams/{team_id}","href":"/devops/developer-api/teams/get_team_members"},{"title":"Create Team","deprecated":null,"version":null,"sidebarTitle":"Create team","openapi":"/devops/developer-api/openapi.yaml post /team","href":"/devops/developer-api/teams/create_team"},{"title":"Add Team Member","deprecated":null,"version":null,"sidebarTitle":"Add team member","openapi":"/devops/developer-api/openapi.yaml post /teams/member","href":"/devops/developer-api/teams/add_team_member"},{"title":"Delete Team","deprecated":null,"version":null,"sidebarTitle":"Delete team","openapi":"/devops/developer-api/openapi.yaml delete /team/{id}","href":"/devops/developer-api/teams/delete_team"},{"title":"Delete Team Member","deprecated":null,"version":null,"sidebarTitle":"Delete team member","openapi":"/devops/developer-api/openapi.yaml delete /teams/member","href":"/devops/developer-api/teams/delete_team_member"}]},{"group":"Account","pages":[{"title":"List Audit Logs","deprecated":null,"version":null,"sidebarTitle":"List audit logs","openapi":"/devops/developer-api/openapi.yaml get /auditlogs","href":"/devops/developer-api/account/list_audit_logs"}]},{"group":"DevOps","pages":[{"group":"Terraform","pages":[{"title":"Upstash Terraform Provider Overview","sidebarTitle":"Overview","href":"/devops/terraform/overview"},{"group":"Resources","pages":[{"title":"upstash_qstash_endpoint","href":"/devops/terraform/resources/upstash_qstash_endpoint"},{"title":"upstash_qstash_schedule","href":"/devops/terraform/resources/upstash_qstash_schedule"},{"title":"upstash_qstash_topic","href":"/devops/terraform/resources/upstash_qstash_topic"},{"title":"upstash_redis_database","href":"/devops/terraform/resources/upstash_redis_database"},{"title":"upstash_team","href":"/devops/terraform/resources/upstash_team"}]},{"group":"Data Sources","pages":[{"title":"upstash_qstash_endpoint_data","href":"/devops/terraform/data_sources/upstash_qstash_endpoint_data"},{"title":"upstash_qstash_schedule_data","href":"/devops/terraform/data_sources/upstash_qstash_schedule_data"},{"title":"upstash_qstash_topic_data","href":"/devops/terraform/data_sources/upstash_qstash_topic_data"},{"title":"upstash_redis_database_data","href":"/devops/terraform/data_sources/upstash_redis_database_data"},{"title":"upstash_team_data","href":"/devops/terraform/data_sources/upstash_team_data"}]}]},{"group":"Pulumi","pages":[{"title":"Upstash Pulumi Provider Overview","sidebarTitle":"Overview","href":"/devops/pulumi/overview"}]}]}]}]}]},"basePath":"","title":"Ratelimit TypeScript SDK Algorithms - Upstash Documentation","buildId":"dpl_6cCEiK8XNNvaLBBkWzcBhdE9QfLC","deploymentId":"dpl_6cCEiK8XNNvaLBBkWzcBhdE9QfLC","dynamics":[],"chunks":[]}