## run_bench.hash.sh 使用指南 - 脚本:`test-redis/run_bench.hash.sh` - 默认策略:`persist_no` / `persist_everysec` / `nopersist` - 测试模式:`set` + `prefill+get` - 默认参数:`REQ=1000000 KEYSPACE=1000000 PIPE=128 VSIZE=32 ROUNDS=5 RETRIES=3` ### 运行示例 ```bash # 默认运行(5轮) ./test-redis/run_bench.hash.sh # 指定大 key 参数(示例) ROUNDS=5 REQ=1000000 KEYSPACE=1000000 PIPE=128 VSIZE=256 RETRIES=3 ./test-redis/run_bench.hash.sh ``` ### 常用环境变量 | 变量 | 默认值 | 说明 | |---|---|---| | `ROUNDS` | `5` | 每个策略的轮次 | | `REQ` | `1000000` | 单次 bench 请求数 | | `KEYSPACE` | `1000000` | key 空间大小 | | `PIPE` | `128` | pipeline 深度 | | `VSIZE` | `32` | value 大小(字节) | | `RETRIES` | `3` | 单轮失败重试次数 | | `SEED` | `12345` | 随机种子基数 | | `ALLOC` | `mypool` | allocator | | `KV_PORT` | `8888` | kvstore 端口 | | `SET_CMD` / `GET_CMD` | `RSET` / `RGET` | 压测命令 | ## 大Key持久化协议复测(覆盖版) - 时间口径:2026-03-07(本次重测) - 参数:`requests=1000000 pipeline=128 keyspace=1000000 value-size=256` - 轮次:每种策略 `5` 轮 - 去异常规则:每个场景按 `qps` 对 `5` 轮做中位数偏差,剔除偏差最大 `1` 轮,再对剩余 `4` 轮取均值 - kvstore 源数据:`results/hash_bench_fair_summary_20260307_062549.csv` - redis 源数据:`results/redis_bigkey_summary_20260307_063158.csv` - kvstore 去异常结果:`results/hash_bench_fair_trimmed_20260307_062549.csv` - redis 去异常结果:`results/redis_bigkey_trimmed_20260307_063158.csv` ## kvstore 原始5轮 | 策略 | 模式 | Round1 | Round2 | Round3 | Round4 | Round5 | 原始均值QPS | 原始均值us/op | |---|---|---:|---:|---:|---:|---:|---:|---:| | persist_no | set | 139895.00 | 138768.00 | 138867.00 | 143296.00 | 144388.00 | 141042.80 | 7.09 | | persist_no | get | 163764.00 | 164079.00 | 166415.00 | 163959.00 | 147881.00 | 161219.60 | 6.21 | | persist_everysec | set | 133067.00 | 126140.00 | 133430.00 | 139786.00 | 141145.00 | 134713.60 | 7.43 | | persist_everysec | get | 162076.00 | 165415.00 | 162180.00 | 163762.00 | 158226.00 | 162331.80 | 6.16 | | nopersist | set | 157950.00 | 143109.00 | 135043.00 | 152045.00 | 147233.00 | 147076.00 | 6.82 | | nopersist | get | 163381.00 | 169356.00 | 155890.00 | 164754.00 | 157550.00 | 162186.20 | 6.17 | ## kvstore 去异常后(4轮均值) | 策略 | 模式 | 剔除轮次 | 剔除QPS | 去异常均值QPS | 去异常均值us/op | |---|---|---:|---:|---:|---:| | persist_no | set | 5 | 144388.00 | 140206.50 | 7.13 | | persist_no | get | 5 | 147881.00 | 164554.25 | 6.08 | | persist_everysec | set | 5 | 141145.00 | 133105.75 | 7.52 | | persist_everysec | get | 5 | 158226.00 | 163358.25 | 6.12 | | nopersist | set | 3 | 135043.00 | 150084.25 | 6.67 | | nopersist | get | 3 | 155890.00 | 163760.25 | 6.11 | ## kvstore 协议开销(基线 nopersist,去异常后) | 策略 | set QPS变化 | set us/op变化 | get QPS变化 | get us/op变化 | |---|---:|---:|---:|---:| | persist_no | -6.58% | +6.90% | +0.48% | -0.49% | | persist_everysec | -11.31% | +12.74% | -0.25% | +0.16% | ## Redis 原始5轮 | 策略 | 模式 | Round1 | Round2 | Round3 | Round4 | Round5 | 原始均值QPS | 原始均值us/op | |---|---|---:|---:|---:|---:|---:|---:|---:| | none | set | 198673.00 | 211843.00 | 193900.00 | 208293.00 | 211071.00 | 204756.00 | 4.89 | | none | get | 225347.00 | 221000.00 | 218357.00 | 216466.00 | 214747.00 | 219183.40 | 4.56 | | aof_no | set | 144042.00 | 139615.00 | 140016.00 | 149925.00 | 150658.00 | 144851.20 | 6.91 | | aof_no | get | 210541.00 | 211713.00 | 202589.00 | 231251.00 | 402028.00 | 251624.40 | 4.24 | | aof_everysec | set | 143737.00 | 132998.00 | 136973.00 | 144448.00 | 142414.00 | 140114.00 | 7.14 | | aof_everysec | get | 212422.00 | 201051.00 | 211508.00 | 192190.00 | 209874.00 | 205409.00 | 4.87 | ## Redis 去异常后(4轮均值) | 策略 | 模式 | 剔除轮次 | 剔除QPS | 去异常均值QPS | 去异常均值us/op | |---|---|---:|---:|---:|---:| | none | set | 3 | 193900.00 | 207470.00 | 4.82 | | none | get | 1 | 225347.00 | 217642.50 | 4.59 | | aof_no | set | 5 | 150658.00 | 143399.50 | 6.98 | | aof_no | get | 5 | 402028.00 | 214023.50 | 4.68 | | aof_everysec | set | 2 | 132998.00 | 141893.00 | 7.05 | | aof_everysec | get | 4 | 192190.00 | 208713.75 | 4.79 | ## Redis 协议开销(基线 none,去异常后) | 策略 | set QPS变化 | set us/op变化 | get QPS变化 | get us/op变化 | |---|---:|---:|---:|---:| | aof_no | -30.88% | +44.81% | -1.66% | +1.96% | | aof_everysec | -31.61% | +46.27% | -4.10% | +4.36% | ## 简要结论 1. 本次大 key(256)下,持久化开销主要体现在 `set`,`get` 相对更稳。 2. `aof_no/aof_everysec` 在 Redis 写路径的开销明显;kvstore 三策略在写路径也存在可见差异。 3. 本报告已剔除每场景 1 个异常轮次,避免单点抖动主导结论。