Redis 热点缓存过期后数据库被打满:互斥重建与逻辑过期实践
适用场景 商品详情、活动配置、首页聚合数据和权限策略等读取接口,通常会把查询结果缓存在 Redis 中。平时数据库负载很低,一旦某个热点键过期,大量并发请求却可能同时回源,几百毫秒内把连接池占满,最终形成接口超时、重试放大和数据库雪崩。 本文讨论的是单个或少量热点键失效导致的缓存击穿。如果大量键在同一时间过期,属于缓存
技术笔记、项目复盘、阅读摘录和问题清单。
适用场景 商品详情、活动配置、首页聚合数据和权限策略等读取接口,通常会把查询结果缓存在 Redis 中。平时数据库负载很低,一旦某个热点键过期,大量并发请求却可能同时回源,几百毫秒内把连接池占满,最终形成接口超时、重试放大和数据库雪崩。 本文讨论的是单个或少量热点键失效导致的缓存击穿。如果大量键在同一时间过期,属于缓存
适用场景 这篇文章适合已经使用 Prometheus 和 Alertmanager,但值班群里经常出现同一告警在几分钟内“触发—恢复—再次触发”的团队。典型场景包括: 接口错误率在阈值附近上下波动; 抓取偶发失败,表达式短暂返回空向量; 应用滚动发布后计数器重置,瞬时比率失真; 规则计算过慢或远端数据到达较晚,评估结果
适用场景 支付回调、代码仓库事件、消息推送和第三方审批通知通常通过 Webhook 进入业务系统。很多服务已经实现了 HMAC 签名校验,却仍会遇到重复发货、重复记账或重复触发流水线的问题。 这类故障的关键在于:签名只能证明请求内容来自持有密钥的一方,不能证明这次请求从未被处理过。 一个合法请求被代理层、第三方平台或攻
适用场景与现象 异步消费者、WebSocket 网关或定时任务服务收到 SIGTERM 后,健康检查已经失败,进程却迟迟不退出,最终被 Kubernetes 在宽限期结束时强制 SIGKILL。常见伴随现象是: 停机日志只出现“开始关闭”,没有“后台任务已结束”; 某个任务仍处于 PENDING,但业务请求已经停止进入
适用场景与现象 同一个接口在生产环境中偶发出现以下现象:有时写入没有立即提交,有时日期相差 8 小时,有时普通查询突然以更严格的事务隔离级别执行。重启应用后故障暂时消失,单独连接 MySQL 手工执行又无法复现。 这类问题常见于使用连接池的 Web 服务、异步任务和批处理程序。连接池归还的是可复用的物理连接,而 MyS
适用场景 应用把 ConfigMap 中的单个配置文件挂载到容器现有目录,例如 /etc/app/app.conf。运维修改了 ConfigMap,kubectl get configmap 显示新值,但运行中的应用始终使用旧配置。本文以一个单副本 Deployment 复现,并给出两种可验证的修复路径。以下命令以 B
Django 新订单偶发“查询不到”:Celery 任务早于事务提交的排查与修复 适用场景与现象 下单接口先写入订单,再让 Celery Worker 发送确认邮件。接口返回成功,Worker 却偶发 Order.DoesNotExist;在管理后台查询,同一订单已经存在。失败多发生在数据库写入较慢、Worker 较空
适用场景 为新接口 api.example.test 添加 A 记录后,监控节点已能解析,部分用户却持续报告“找不到域名”。本文以新建记录为例,区分权威服务器未同步、递归解析器负缓存和终端本地缓存。文中的 example.test、权威服务器和 IP 均为示例,执行前须替换为自己的域名与地址。 现象先分清 DNS 查询
适用场景 本文适用于 PostgreSQL 表使用 serial、bigserial 或 identity 列生成主键,但执行正常 INSERT 时仍出现主键重复的场景。常见诱因包括数据迁移、手工补数据、COPY 导入、只恢复表数据却漏掉序列状态,或者在不同环境之间合并数据。 典型表结构如下: CREATE TABLE
适用场景 本文适用于在 Kubernetes 中运行数据库备份、账单汇总、定时同步、报表生成等周期任务,并遇到以下问题的团队: 上一次任务尚未结束,下一次任务已经启动,两个 Pod 同时修改同一批数据; 控制面短暂不可用或 CronJob 暂停后恢复,任务突然补跑; 配置了 concurrencyPolicy: For