REDIS · LUA 原子执行预算
一次执行不能被穿插,
也意味着别人只能排队
Lua 把“读—判断—写”关进一个不可分割的执行单元。正确性更稳了,但脚本占住 Redis 的每一毫秒,都会变成后续请求的等待时间。
先守住一个底线脚本只做常量时间或有明确上限的工作;任何扫描都要能回答“最坏会扫多少个”。
预算健康:主线程仍有余量
可以继续观察高峰值;上线前仍要用真实数据校准每元素成本。
估算单次占用
脚本 + 扫描成本—
脚本 + 扫描成本—
Redis 主线程利用率
建议峰值 < 70%—
建议峰值 < 70%—
估算 P95 排队等待
不含网络 RTT—
不含网络 RTT—
每秒积压
大于 0 即无法自愈—
大于 0 即无法自愈—
一秒执行预算
色块代表正在等待执行的请求0%70% 预警100% 饱和
占用率 = 有效 QPS × 单次占用 ÷ 1000 ms
超时边界—
回退动作—
脚本如何到达 Redis
假设单次 RTT = 2 ms原子性发生在 Redis 内部;客户端选择的发送路径,决定网络往返、NOSCRIPT 恢复方式和故障窗口。
平均网络往返—
估算网络等待—
部署风险—
Cluster 同槽闸门
CRC16 mod 16384Lua 同时操作多个 key 时,它们必须落在同一个 hash slot。花括号里的 hash tag 决定参与分槽的片段。
可以执行:两个 key 位于同一槽
—
CROSSSLOT Keys in request don't hash to the same slot
部署检查顺序:先验证 key 命名与同槽,再预加载脚本并记录 SHA,最后在压测中观测 Redis 命令延迟与慢日志。预算灯号用于提前发现风险,不替代生产测量。