Tair 持久内存、Tair 持久增强型性能白皮书

更新时间:
复制为 MD 格式

本文对比 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

image.png

测试环境

服务端

测试环境信息

说明

实例规格

本次测试以下实例规格:

  • Tair 持久内存型 8 GB

  • Tair 持久增强型 8 GB

测试结果受规格影响较小,更多关于规格的详情请参见实例规格

实例架构

标准架构(双副本),不启用集群,详情请参见标准架构

实例版本

本次测试兼容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 命令的读取性能。

    1. 构造数据,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}"
    1. 测试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最多10000Field,测试时长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 命令的读取性能。

    1. 构造数据,Key范围为0-1000,Score范围为0-70000,每个Key最多10007Field:

    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}"
    1. 测试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,每个FieldValue大小为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 命令的读取性能。

    1. 构造数据,Key范围为0-1000,每个Key包含10007Field,每个FieldValue大小为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}"
    1. 测试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 命令的读取性能。

    1. 构造数据,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}"
    1. 测试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 命令的读取性能。

    1. 构造数据,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}"
    1. 测试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字节。

    1. 载入Lua脚本:

    redis-cli -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 SCRIPT LOAD "return redis.call('SET', KEYS[1], ARGV[1])"
    1. 测试命令时长20秒:

    resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "EVALSHA d8f2fad9f8e86a53d2a6ebd960b33c4972cacc37 1 {key uniform 10000000