-
Adding a Redis Shard Took Down Production Writes for Over an Hour
Redis memory was full. After one round of clearing cold data, usage only dropped by 5 GB, so I decided to just add a shard and scale out directly. As a result, only 12 seconds after slot migration started, `ZADD` in the recommendation service began throwing errors like crazy. I thought the service just hadn’t picked up the new node and a restart would fix it, but it was still failing even after the restart. Following that `"reachable node:None"` message all the way down, I eventually traced it to a line in the `redis-py` client that basically says, “if a node times out, remove it from the list.”
-
A Synchronous Blocking Call Froze the Entire Event Loop
The service was mysteriously getting drained and rebuilt in batches. The database looked pretty stable too. After digging into it for quite a while, I finally found that a third-party SDK was quietly making a synchronous blocking call inside an `async` function, freezing the event loop for several seconds and triggering a whole cascading failure chain.
-
A Database Avalanche Incident Investigation
The first thing I saw after being pulled into the incident chat was: "Every API is timing out." We stopped the bleeding first and gave the database a chance to recover, then circled back to figure out why a hidden risk planted two and a half days earlier would suddenly blow up all at once at that exact moment. Following the trail, it turned out to be a complete chain of events: an analytical query that had been left running, a high-traffic endpoint with a missing index, and a distributed lock that got released at exactly the wrong time. All three lined up and detonated together.
-
How to Elegantly Connect a Local GUI Client to a Private Redis on AWS / GCP
Say Goodbye to Tedious and Fragile SSM Port Forwarding: Use SSH Tunnels to Give Desktop Clients Smooth Direct Access to Redis Across Multiple Environments
-
An Emergency Production Incident: Redis Memory Exhaustion, Precise Cleanup, and an Architectural Postmortem
Redis Memory Hit 99.98% in Production and Triggered Eviction Alerts: How We Precisely Cleaned Up 50% of Cold Data Using LRU Idle Time to Free 4GB of Memory, and a Postmortem on the Architectural Risks Behind It
-
Investigating a Slow Memory Leak: Creating a New OpenAI Client Every Time, with the Real Issue in the Event Loop
While investigating a slow memory leak in a service, I came across a piece of background enrichment logic a teammate had written: on every call, it instantiated a brand-new `AsyncOpenAI` client, and the connection pool quietly piled up into a leak. I wanted to simply cache and reuse the client, but it turned out that didn’t work at all—the root cause was the lifecycle of the event loop.
Selected articles
Lenovo 510smini mini PC
The naming convention for coding summarized by myself hopefully can give you a reference
Why e-waste often has a second life
Open source software
Automatically caching method data annotations