全部產品
Search
文件中心

ApsaraDB for Redis:Redis社區版、Tair記憶體型效能白皮書

更新時間:Sep 15, 2024

本文介紹Tair記憶體型、Redis社區版的效能測試結果,以及測試環境、測試載入器與測試方法。

測試結果

對包括SET、GET等在內的十餘種Redis基礎命令進行效能測試並給出測試單位。

命令

Tair記憶體型

Redis社區版

QPS

Average Latency

99th Percentile Latency

QPS

Average Latency

99th Percentile Latency

SET

282,656

0.45

0.86

142,376

0.45

0.72

GET

519,761

0.24

0.36

204,690

0.31

0.47

ZADD

208,169

0.62

1.14

113,135

0.57

0.78

ZSCORE

463,904

0.27

0.40

170,163

0.37

0.54

HSET

260,069

0.49

1.03

124,613

0.51

0.97

HGET

494,603

0.25

0.37

188,903

0.34

0.52

LPUSH

286,324

0.44

0.84

153,269

0.42

0.59

LINDEX

414,070

0.30

0.45

157,568

0.40

0.58

SADD

292,738

0.44

0.86

140,155

0.45

0.63

SISMEMBER

531,139

0.24

0.34

181,492

0.35

0.52

EVALSHA

214,303

0.60

1.12

101,136

0.63

0.91

測試單位說明:

  • QPS:每秒處理的讀寫運算元,單位為次/秒。

  • Average Latency:操作的平均延遲時間,單位為毫秒(ms)。

  • 99th Percentile Latency:99%操作延遲,指99%操作的最大延遲時間,單位為毫秒(ms)。例如該指標的值為0.5毫秒,表示99%的請求可以在0.5毫秒內被處理。

說明
  • 測試結果為在多個可用性區域、對多個執行個體、進行多次測試的平均值。

  • 測試結果中的延遲為全鏈路延遲,包含資料包在DB側及壓測端排隊的時延。

  • 測試結果受到多種不可控因素的影響,存在約10%的誤差屬於合理範圍。

  • 測試結果僅代表新購執行個體進行單一命令測試的結果,而生產環境執行個體的壓力測試請以業務壓測情境為準。

  • 測試結果反映了執行個體的極限效能,在生產環境中,不建議將執行個體維持在極限負載狀態。

測試環境

資料庫

測試環境資訊

說明

地區和可用性區域

華北2(北京)可用性區域L、華東1(杭州)可用性區域K、華東2(上海)可用性區域N、華南1(深圳)可用性區域C。

說明

本測試在多個地區進行,本測試報告僅代表上述可用性區域的平均效能水平。

執行個體架構

標準架構(雙副本),不啟用叢集,詳情請參見標準架構

說明

其他架構的效能說明:

  • 叢集架構代理模式:當請求的Key分布均勻時,其效能不低於標準架構的n倍。

  • 叢集架構直連模式:當請求的Key分布均勻時,其效能等於標準架構的n倍。

  • 讀寫分離架構:寫效能略低於標準架構(因為有更多的複製流量),讀效能不低於標準架構的n倍。

n為叢集架構的分區節點數或讀寫分離架構的總節點數。

執行個體規格

由於測試結果受規格影響較小,本次測試以下執行個體規格:

  • Tair記憶體型8 GB(tair.rdb.8g)

  • Redis社區版8 GB(redis.shard.xlarge.ce)

規格詳情請參見規格查詢導航

測試用戶端

測試環境資訊

說明

部署壓測工具的裝置

Elastic Compute Service執行個體,規格為ecs.g7.8xlarge,詳情請參見執行個體規格類型系列

地區和可用性區域

與執行個體對應的地區及可用性區域。

作業系統

Alibaba Cloud Linux 3。

網路

Redis執行個體為相同Virtual Private Cloud,且與Redis執行個體通過專用網路串連。

測試載入器

使用resp-benchmark開源工具進行壓測。SET、GET等常規測試項與redis-benchmark保持一致,在其餘測試項中可以更有效地類比使用者真實情境,壓滿Tair多個線程,從而體現Tair的實際效能。

說明

您可以執行resp-benchmark --help命令擷取更詳細的配置項說明,或訪問其GitHub首頁。

安裝方法

pip install resp-benchmark==0.1.7

測試樣本

重要
  • 每次測試時建議先清空資料庫,避免已有資料存在幹擾。

  • resp-benchmark在未指定串連數時會自動選擇相對合適的串連數,為測得極限負載下的資料建議手動調整串連數,比如設定為128,可以通過增加參數-c 128實現。串連數過低時,測試壓力不足,導致QPS資料偏低;串連數過高時,測試壓力可能會超過DB的處理能力,資料包會在網路鏈路中排隊較長時間,導致延遲資料偏高。因為影響因素較多,難以在下文中給出固定的串連數配置,常見的串連數設定為32、64、128、192和256,可根據實際測試情況自行調整。

以下為各命令的測試執行個體:

  • 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}"
    2. 測試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 "ZADD {key uniform 1000} {rand 70000} {key uniform 10000}"
  • ZSCORE

    該指標代表ZSCORE命令的效能。

    1. 構造資料,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}"
    2. 測試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,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命令的效能。

    1. 構造資料,Key範圍為0-1000,每個Key包含10007個Field,資料大小為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}"
    2. 測試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}"
    2. 測試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}"
    2. 測試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])"
    2. 測試命令時間長度20秒:

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