Redis 缓存雪崩?不是 TTL 一样,是过期相位同步塌陷(附打散脚本)

摘要:Redis 凌晨集中过期、MySQL 被打满,传统解法是"加随机 TTL"。用螺旋生成论看,本质是 Key 的过期相位同步塌陷。本文给出按热度分带的螺旋 TTL 算法,可直接用。

标签:螺旋生成论, 螺旋相位, AIGC, Redis, 缓存

分类专栏:数据库(专栏:IT疑难杂症诊疗室:螺旋相位诊断法)

创作话题:AI 原生开发实战

Redis 缓存雪崩?不是 TTL 一样,是过期相位同步塌陷(附打散脚本)

昨天订单服务凌晨 2 点报警:

  • 缓存命中率 98% → 31%
  • MySQL CPU 95%
  • P99 从 80ms 飙到 2.3s

原因很简单:200 万 Key 同时写入,TTL 都是 3600s。

凌晨 2 点一起过期,后端被击穿。

传统说法:"加随机值。"

螺旋说法更准:

缓存雪崩 = 过期相位同步塌陷。

螺旋 TTL:热 Key 内圈、冷 Key 外圈

复制代码
复制代码
复制代码
import math, hashlib

BASE_TTL = 3600
JITTER = 1800

def spiral_ttl(key: str, heat: float) -> int:
    h = int(hashlib.md5(key.encode()).hexdigest(), 16)
    phi = (h % 100000) / 100000 * 2 * math.pi
    base = 1800 + int(heat * 7200)          # 热 Key 活更久
    jitter = int(math.sin(phi) * 2400 * (1 - heat))
    return max(300, base + jitter)

print(spiral_ttl("hot:order:1", 0.95))   # 热 Key:长且稳
print(spiral_ttl("cold:log:9999", 0.05)) # 冷 Key:短且散

效果:

指标 改前 改后
凌晨命中率 31% 92%+
MySQL 峰值 CPU 95% 55%
集中过期/秒 数万 千级

别只加随机 TTL,要把 Key 的生存周期铺成一条螺旋。

热 Key 靠内圈、冷 Key 靠外圈、失效时刻沿相位展开。

下一篇:PG 主从延迟跳变,先看 WAL 相位流速差。

参考文献

  • 张智明. 螺旋数原理. Zenodo. DOI:10.5281/zenodo.20602099

本文由作者原创,部分代码由 AI 辅助生成。

相关推荐
又过二十8 小时前
macOS 录屏剪辑工具DogSC「逐文件」搬进 Windows —— DogSC Desktop 转写记
ai·aigc·录屏工具
小虎AI生活8 小时前
WorkBuddy 自动化工作流实测:从分镜脚本到 MP4 成片的 18 步复盘
aigc·ai编程
vjmap11 小时前
MCP 实战:在 WorkBuddy 里一句话让 AI 生成红军长征地图动画(唯杰 AI 地图动画 MCP 接入教程)
aigc·gis·mcp
aiks_yuan14 小时前
Token 放 Redis 还是用 JWT:Java 实测验签和查 Redis 耗时,退出登录、改密码踢下线怎么做(jjwt 0.12 + Redis 7.2)
redis
Disoluteness1118 小时前
我用 FastAPI + 阿里万相搭了条数字人流水线,做完才发现难点不在生成
aigc
无所畏俱的老尹20 小时前
Agent 落地为什么需要影子对照:同输入只读双跑、写动作变提案、差异报警,比直接切全量更安全
人工智能·机器学习·云计算·aigc·devops
徐开泉21 小时前
名单不是排行榜|用重复采样方差量化"稳定在前三"的概率(2026)
aigc
我不会起名字3221 天前
Redis 从 0 到 1(二十九):CPU 突然 100%——commandstats 定位法与 6 步排查链路
redis·cpu·慢查询·排查·commandstats
code2cat1 天前
【随笔】KV缓存卸载:逐层预取能藏住多少传输时间
人工智能·缓存·大语言模型
我不会起名字3221 天前
Redis 从 0 到 1(二十八):Redis 抖一下,重试把它打挂了——超时/重试/熔断的 Go 封装
redis·go·超时·熔断·重试