Redis: Redis Performance Testing

パフォーマンステストはRedisのパフォーマンスを評価する重要な方法です。このレッスンでは、redis-benchmarkを使用したテストについて解説します。

1. redis-benchmarkの紹介

redis-benchmarkはRedisに組み込まれているパフォーマンステストツールで、さまざまなRedis操作をテストできます。

(1) 基本的な使用方法

BASH
# 基本テスト(デフォルト:100000リクエスト、50の同時クライアント)
redis-benchmark

# ホストとポートを指定
redis-benchmark -h 127.0.0.1 -p 6379

# リクエスト数と同時実行数を指定
redis-benchmark -n 100000 -c 100

(2) よく使われるパラメータ

パラメータ 説明 デフォルト
-h ホストアドレス 127.0.0.1
-p ポート 6379
-n リクエスト数 100000
-c 並列クライアント数 50
-d データサイズ(バイト) 3
-k keepaliveを使用 1
-q 簡易出力 false
-t テストするコマンド すべて
-P パイプラインサイズ 1

2. テスト結果の解釈

▶ サンプル出力

TEXT 📖 参照専用
====== SET ======
  100000 requests completed in 1.23 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

99.00% <= 1 milliseconds
99.80% <= 2 milliseconds
100.00% <= 3 milliseconds
81300.81 requests per second

====== GET ======
  100000 requests completed in 1.15 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

99.00% <= 1 milliseconds
99.90% <= 2 milliseconds
100.00% <= 3 milliseconds
86956.52 requests per second

(1) 主要メトリクス

メトリクス 説明
requests per second QPS(1秒あたりのクエリ数)
99.00% <= 1 milliseconds リクエストの99%が1ms以内に完了
parallel clients 同時クライアント数
payload データサイズ

3. 一般的なテストシナリオ

(1) SET操作のテスト

BASH
# SET操作をテスト
redis-benchmark -t set -n 100000 -c 50

# パイプライン付きSETをテスト
redis-benchmark -t set -n 100000 -c 50 -P 10

(2) GET操作のテスト

BASH
# GET操作をテスト
redis-benchmark -t get -n 100000 -c 50

(3) 特定のコマンドのテスト

BASH
# 特定のコマンドをテスト
redis-benchmark -t set,get,incr,lpush,rpush,lpop,rpop,sadd,hset -n 100000 -c 50

(4) パイプラインのテスト

BASH
# パイプラインを使用(バッチでコマンドを送信)
redis-benchmark -t set -n 100000 -c 50 -P 10

# パイプラインありとなしのパフォーマンス比較
redis-benchmark -t set -n 100000 -c 50 -P 1
redis-benchmark -t set -n 100000 -c 50 -P 10
redis-benchmark -t set -n 100000 -c 50 -P 100

(5) 大規模データのテスト

BASH
# 大規模データサイズでテスト
redis-benchmark -t set -n 100000 -c 50 -d 1024

# 異なるデータサイズでテスト
redis-benchmark -t set -n 100000 -c 50 -d 64
redis-benchmark -t set -n 100000 -c 50 -d 256
redis-benchmark -t set -n 100000 -c 50 -d 1024

4. パフォーマンス最適化のヒント

(1) パイプラインを使用

パイプライン化によりネットワークラウンドトリップを削減し、パフォーマンスを大幅に向上できます:

BASH
# パイプラインなし
redis-benchmark -t set -n 100000 -c 50 -P 1
# 結果:~80000 QPS

# パイプラインあり
redis-benchmark -t set -n 100000 -c 50 -P 10
# 結果:~200000 QPS

(2) バッチコマンドを使用

バッチコマンドは個別のコマンドよりも効率的です:

BASH
# 個別コマンド
redis-benchmark -t set -n 100000 -c 50
# 結果:~80000 QPS

# バッチコマンド(MSET)
redis-benchmark -t mset -n 100000 -c 50
# 結果:~150000 QPS

(3) 設定の調整

BASH
# 最大メモリを調整
redis-cli CONFIG SET maxmemory 256mb

# 最大クライアント接続数を調整
redis-cli CONFIG SET maxclients 10000

# 永続化を無効化(テスト用)
redis-cli CONFIG SET save ""
redis-cli CONFIG SET appendonly no

5. パフォーマンスベースラインリファレンス

(1) シングルインスタンスのパフォーマンス

操作 QPS(パイプラインなし) QPS(パイプラインP=10)
SET 80,000 200,000
GET 90,000 250,000
INCR 85,000 220,000
LPUSH 80,000 200,000
LRANGE(100) 30,000 80,000
💡 補足: 実際のパフォーマンスは、ハードウェア、ネットワーク環境、データサイズなどの要因に依存します。


6. カスタムテストスクリプト

(1) Luaスクリプトの使用

BASH
# テストスクリプトを作成
cat > test.lua << 'EOF'
for i = 1, 100000 do
  redis.call('SET', 'key:' .. i, 'value:' .. i)
end
EOF

# テストを実行
redis-cli --eval test.lua

(2) Pythonの使用

PYTHON
import redis
import time

r = redis.Redis(host='localhost', port=6379)

# SET操作をテスト
start = time.time()
for i in range(100000):
    r.set(f'key:{i}', f'value:{i}')
end = time.time()

print(f'SET: {100000 / (end - start):.0f} QPS')

▶ サンプル

パフォーマンスベンチマークテスト:

BASH
# ベンチマークの実行
redis-benchmark -t set,get -n 100000 -q
# 出力例:
# SET: 95057.12 requests per second
# GET: 98135.42 requests per second

❓ よくある質問

Q redis-benchmarkの結果は本番環境と異なりますか?
A はい。redis-benchmarkは理想的な環境で実行されます。実際の本番パフォーマンスは、ネットワーク、同時実行数、データサイズなどの影響を受けます。
Q Redisクラスターのパフォーマンスをテストするにはどうすればよいですか?
A redis-benchmarkで特定のノードパラメータを使用するか、専用のクラスターテストツールを使用します。
Q 推奨されるパイプラインサイズは?
A 通常は10〜100で、ネットワーク環境とデータサイズによって異なります。

📖 まとめ

📝 練習問題

  1. 基本テスト: redis-benchmarkを使用してSETとGET操作をテストしましょう
  2. パイプラインテスト: パイプラインありとなしのパフォーマンスを比較しましょう
  3. 最適化テスト: 異なる設定パラメータを試して、パフォーマンスの変化を観察しましょう

7. 次のレッスン

次のレッスンでは、Redis Pipeliningについて学びます。パイプラインの原理と使用方法を理解します。

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%