Why you shouldn’t use Redis as a rate limiter: Part 1 of 2
A tour of the common Redis-based rate limiter implementations — and the correctness and performance traps each one hides.
We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
Rate limiting and admission checks that help reduce overload and protect expensive work.
Set admission budgets for launch spikes and promos before excess work reaches your handlers.
Fewer moving parts to run and monitor. Spend less on Redis and ops.
Add via SDK. Keep your stack. Clear limits your customers understand.
UNDERSTAND OVERLOAD · KEEP USEFUL WORK MOVING
For developers, architects, and managers: 27 narrated lessons on why services overload and how to protect them. No cloud experience required. Start with one request, or jump to any lesson.
Four chapters, one learning path. Read or listen in any order. ~41 minutes total · Times shown at 1×.
Keep enough capacity to finish work and recover.
Contain one customer's excess without punishing everyone.
Reduce work entering a shared dependency when it slows.
Choose, combine, and test the right protections.
Read the explanation or use the course map above. Audio is optional.
Message sequence
The browser asks the application to do work.
The application needs data before it can build the report.
The data has returned to the application, not yet to Maya.
The application turns records into the result Maya asked for.
Only a usable response completes Maya’s task.
Time runs downward. Solid arrows ask; dashed arrows return.
Read the numbered steps in order. The explanation below follows the narration.
Maya needs a usable report.
Accepting a request is not the same as delivering a useful result.
Accepting a request is not the same as delivering a useful result.
Maya needs her sales report before a meeting. Keeping useful results available is the goal of this explanation. You do not need cloud or networking experience to follow it.
When Maya clicks Open report, her browser sends a request: a message asking a computer to do something. The application is the program that receives that message and decides what work is needed. Here, it asks a database, a system that stores and retrieves the sales records.
The database returns the records. The application turns them into a report and sends a response back to Maya. A response is the answer to the request. Maya has succeeded only when she receives a usable report, not when the application merely accepts her message.
What if the application accepts the request but the report never arrives? The computer started something, but Maya still cannot do her job.
Overview of the normal path. Maya uses the browser; the application builds the report; the database supplies records. A started request is not yet a delivered result.
The request carries an instruction to the application. Accepting it starts work; it does not mean the report exists or has reached the browser.
This is a second call inside the original request. The application is a caller of the database while it is still serving Maya.
The records have reached the application, not yet Maya. This internal completion is only one step of her request.
The application still has work to do after the query finishes. Database completion and customer completion are different events.
The answer must reach the browser and be usable. Counting accepted requests alone misses this last part of the customer’s experience.
The useful outcome is Maya receiving her report. A query finishing internally is not sufficient evidence of that outcome.
Alternative outcome: acceptance happened, but the response never arrived. This does not establish where the path failed or whether database work completed.
Content revision: 07c7dd00db17
Download review copy (27 lessons)The app accepted Maya’s request. Has she succeeded?
Only if a usable report reaches her. Acceptance alone is not a completed customer outcome.
Identify the real customer result before choosing counters or failure indicators.
This example reads a report; a failed response would not by itself establish whether a write committed.
Start here. No earlier lesson is required.
Measure successful, useful responses separately from accepted requests and internal completions.
Original explanation inspired by Fred Hébert and operational references; no endorsement implied.
AI-generated narration: ElevenLabs Eleven v3, Daniel stock voice. Audio streams only when you start listening.
A tour of the common Redis-based rate limiter implementations — and the correctness and performance traps each one hides.
The myth of infinite serverless scale — why adding machines doesn’t fix overload, and what to do instead.