插入5万个key全部设置相同的200毫秒过期时间,追踪DBSIZE的下降轨迹,并用并发PING探测批量过期对服务响应的影响。
如果一次性给大量key设了几乎相同的TTL,到期那一刻会不会造成服务卡顿。
操作插入5万个key,全部PX 200(200毫秒后过期) 追踪之后2秒内DBSIZE的变化
记录到期前后DBSIZE随时间的完整轨迹。
结果t=0.11s DBSIZE=5239 t=0.22s DBSIZE=0 t=0.33s~2.14s DBSIZE=0(持续保持)
观测到:从"还剩5239个"到"清零",中间经过了大约110毫秒——不是瞬间从5万变成0,而是后台的过期扫描机制在分批处理这批同时到期的key,一轮一轮地清,不是一次性全扫完。
用并发PING探测这段时间里服务器有没有被拖慢。
结果观测窗口(2秒)内PING次数: 284 最大单次PING延迟: 7.55 ms 平均PING延迟: 0.202 ms
整个5万个key批量过期的过程中,并发PING的最大延迟只有7.55毫秒——不算完全无感知,但远远没有到"卡顿"的程度(对照本系列讲DEL大key时测出的819毫秒阻塞,这个数字小了100多倍)。
每一步都是本文上面用redis-py跑出来的原始结果。