本文对比 Tair 持久内存型与 Tair 持久增强型在 SET、GET 等十余种 Redis 基础命令上的性能表现。测试结果表明,持久增强型在所有命令上的 QPS 均优于持久内存型(提升幅度 8%~220%),同时延迟更低。
本文测试数据仅供参考,实际性能受业务负载、数据模型、网络条件等因素影响。建议以您自身业务场景的测试结果为准。
测试结果
对 SET、GET 等十余种 Redis 基础命令进行性能测试,对比 Tair 持久内存型与持久增强型的性能表现。
测试指标说明:
QPS:每秒处理的读写操作数,单位为次/秒。
Avg Latency:操作的平均延迟时间,单位为毫秒(ms)。
P99 Latency:99%操作延迟,指99%操作的最大延迟时间,单位为毫秒(ms)。例如该指标的值为0.5毫秒,表示99%的请求可以在0.5毫秒内被处理。
命令 | Tair 持久内存型 | Tair 持久增强型 | ||||
QPS | Average Latency | 99th Percentile Latency | QPS | Average Latency | 99th Percentile Latency | |
SET | 135,247 | 0.93 | 1.50 | 162,870 | 0.69 | 1.10 |
GET | 208,960 | 0.61 | 0.90 | 244,942 | 0.48 | 0.78 |
ZADD | 96,007 | 1.29 | 1.90 | 110,026 | 0.97 | 1.40 |
ZSCORE | 154,693 | 0.82 | 1.00 | 219,647 | 0.53 | 0.91 |
HSET | 68,565 | 1.81 | 3.80 | 134,909 | 0.81 | 1.80 |
HGET | 180,050 | 0.70 | 0.91 | 249,766 | 0.47 | 0.75 |
LPUSH | 143,951 | 0.87 | 1.20 | 155,804 | 0.72 | 1.10 |
LINDEX | 62,112 | 2.01 | 2.80 | 198,554 | 0.58 | 0.99 |
SADD | 138,710 | 0.90 | 1.20 | 164,255 | 0.68 | 1.10 |
SISMEMBER | 162,585 | 0.78 | 0.99 | 255,262 | 0.46 | 0.76 |
EVALSHA | 89,726 | 1.38 | 2.10 | 110,019 | 1.03 | 1.80 |

测试环境
服务端
测试环境信息 | 说明 |
实例规格 | 本次测试以下实例规格:
测试结果受规格影响较小,更多关于规格的详情请参见实例规格。 |
实例架构 | 标准架构(双副本),不启用集群,详情请参见标准架构。 |
实例版本 | 本次测试兼容Redis 6.0版本,通常测试结果受版本影响较小。 |
客户端
测试环境信息 | 说明 |
压测客户端 | 什么是云服务器ECS实例,规格为ecs.g7.8xlarge,详情请参见实例规格族。 |
网络 | 与Tair实例为相同专有网络(VPC),且与Tair实例通过专有网络连接。 |
测试工具
使用Tair团队开源的resp-benchmark工具:
SET、GET等常规测试项与redis-benchmark保持一致,在复杂测试项中采用更贴近真实业务场景的测试模式。
默认启用了多线程能力,最大程度向服务端发送请求增压,避免压测客户端成为性能瓶颈。
测试命令
以下为各命令的测试示例。请将示例中的连接地址替换为您自己的实例地址。
SET
测试 SET 命令的写入性能。
测试SET命令,Key范围为0-10000000(表示生成的Key名称为
key_0000000000~key_0009999999),Value大小为64字节,测试时长20秒:resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "SET {key uniform 10000000} {value 64}"GET
测试 GET 命令的读取性能。
构造数据,Key范围为0-10000000,Value大小为64字节:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 --load -c 256 -P 10 -n 10000000 "SET {key sequence 10000000} {value 64}"测试GET命令,测试时长20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "GET {key uniform 10000000}"ZADD
测试 ZADD 命令的写入性能。
测试ZADD的写性能,Key范围为0-1000,Score范围为0-70000,每个Key最多10000个Field,测试时长20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "ZADD {key uniform 1000} {rand 70000} {key uniform 10000}"ZSCORE
测试 ZSCORE 命令的读取性能。
构造数据,Key范围为0-1000,Score范围为0-70000,每个Key最多10007个Field:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 --load -c 256 -P 10 -n 10007000 "ZADD {key sequence 1000} {rand 70000} {key sequence 10007}"测试ZSCORE命令,测试时长20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "ZSCORE {key uniform 1000} {key uniform 10007}"HSET
测试 HSET 命令的写入性能。
测试HSET命令,Key范围为0-1000,Field范围为0-10000,每个Field的Value大小为64字节,测试时长20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "HSET {key uniform 1000} {key uniform 10000} {value 64}"HGET
测试 HGET 命令的读取性能。
构造数据,Key范围为0-1000,每个Key包含10007个Field,每个Field的Value大小为64字节:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 --load -c 256 -P 10 -n 10007000 "HSET {key sequence 1000} {key sequence 10007} {value 64}"测试HGET命令,测试时长20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "HGET {key uniform 1000} {key uniform 10007}"LPUSH
测试 LPUSH 命令的写入性能。
测试LPUSH命令,Key范围为0-1000,Value大小为64字节,测试时长20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "LPUSH {key uniform 1000} {value 64}"LINDEX
测试 LINDEX 命令的读取性能。
构造数据,Key范围为0-1000,每个Key包含10000条数据,数据大小为64字节:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 --load -c 256 -P 10 -n 10000000 "LPUSH {key sequence 1000} {value 64}"测试LINDEX命令,测试时长20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "LINDEX {key uniform 1000} {rand 10000}"SADD
测试 SADD 命令的写入性能。
测试SADD命令,Key范围为0-1000,Value大小为64字节,测试时长20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "SADD {key uniform 1000} {value 64}"SISMEMBER
测试 SISMEMBER 命令的读取性能。
构造数据,Key范围为0-1000,每个Key包含10007条数据,数据大小为64字节:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 --load -c 256 -P 10 -n 10007000 "SADD {key sequence 1000} {key sequence 10007}"测试SISMEMBER命令,测试时长20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "SISMEMBER {key uniform 1000} {key uniform 10007}"EVALSHA
该指标代表在EVALSHA中执行SET命令的性能,其中SET命令的Key范围为0-10000000,Value大小为64字节。
载入Lua脚本:
redis-cli -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 SCRIPT LOAD "return redis.call('SET', KEYS[1], ARGV[1])"测试命令时长20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "EVALSHA d8f2fad9f8e86a53d2a6ebd960b33c4972cacc37 1 {key uniform 10000000