REDIS · LUA 原子执行预算

一次执行不能被穿插,
也意味着别人只能排队

Lua 把“读—判断—写”关进一个不可分割的执行单元。正确性更稳了,但脚本占住 Redis 的每一毫秒,都会变成后续请求的等待时间。

先守住一个底线脚本只做常量时间或有明确上限的工作;任何扫描都要能回答“最坏会扫多少个”。

预算健康:主线程仍有余量

可以继续观察高峰值;上线前仍要用真实数据校准每元素成本。

估算单次占用
脚本 + 扫描成本
—
Redis 主线程利用率
建议峰值 < 70%
—
估算 P95 排队等待
不含网络 RTT
—
每秒积压
大于 0 即无法自愈
—

一秒执行预算

色块代表正在等待执行的请求
—
0%70% 预警100% 饱和

占用率 = 有效 QPS × 单次占用 ÷ 1000 ms

超时边界—
回退动作—

脚本如何到达 Redis

假设单次 RTT = 2 ms

原子性发生在 Redis 内部;客户端选择的发送路径,决定网络往返、NOSCRIPT 恢复方式和故障窗口。

平均网络往返—
估算网络等待—
部署风险—

Cluster 同槽闸门

CRC16 mod 16384

Lua 同时操作多个 key 时,它们必须落在同一个 hash slot。花括号里的 hash tag 决定参与分槽的片段。

可以执行:两个 key 位于同一槽

—

部署检查顺序:先验证 key 命名与同槽,再预加载脚本并记录 SHA,最后在压测中观测 Redis 命令延迟与慢日志。预算灯号用于提前发现风险,不替代生产测量。