Redis Performance Testing
パフォーマンステストはRedisのパフォーマンスを評価する重要な方法です。このレッスンでは、redis-benchmarkを使用したテストについて解説します。
redis-benchmarkの紹介
redis-benchmarkはRedisに組み込まれているパフォーマンステストツールで、さまざまなRedis操作をテストできます。
基本的な使用方法
BASH
# 基本テスト(デフォルト:100000リクエスト、50の同時クライアント)
redis-benchmark
# ホストとポートを指定
redis-benchmark -h 127.0.0.1 -p 6379
# リクエスト数と同時実行数を指定
redis-benchmark -n 100000 -c 100
よく使われるパラメータ
| パラメータ | 説明 | デフォルト |
|---|---|---|
-h |
ホストアドレス | 127.0.0.1 |
-p |
ポート | 6379 |
-n |
リクエスト数 | 100000 |
-c |
並列クライアント数 | 50 |
-d |
データサイズ(バイト) | 3 |
-k |
keepaliveを使用 | 1 |
-q |
簡易出力 | false |
-t |
テストするコマンド | すべて |
-P |
パイプラインサイズ | 1 |
テスト結果の解釈
サンプル出力
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
主要メトリクス
| メトリクス | 説明 |
|---|---|
| requests per second | QPS(1秒あたりのクエリ数) |
| 99.00% <= 1 milliseconds | リクエストの99%が1ms以内に完了 |
| parallel clients | 同時クライアント数 |
| payload | データサイズ |
一般的なテストシナリオ
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
パフォーマンス最適化のヒント
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
パフォーマンスベースラインリファレンス
シングルインスタンスのパフォーマンス
| 操作 | 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 |
💡 補足: 実際のパフォーマンスは、ハードウェア、ネットワーク環境、データサイズなどの要因に依存します。
カスタムテストスクリプト
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
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')
❓ よくある質問
Q redis-benchmarkの結果は本番環境と異なりますか?
A はい。redis-benchmarkは理想的な環境で実行されます。実際の本番パフォーマンスは、ネットワーク、同時実行数、データサイズなどの影響を受けます。
Q Redisクラスターのパフォーマンスをテストするにはどうすればよいですか?
A redis-benchmarkで特定のノードパラメータを使用するか、専用のクラスターテストツールを使用します。
Q 推奨されるパイプラインサイズは?
A 通常は10〜100で、ネットワーク環境とデータサイズによって異なります。
📖 まとめ
- redis-benchmarkはRedisに組み込まれているパフォーマンステストツール
- 主要メトリクス:QPS、レイテンシパーセンタイル
- パイプライン化によりパフォーマンスを大幅に向上可能
- バッチコマンドは個別コマンドよりも効率的
- 実際のパフォーマンスはハードウェア、ネットワーク、データサイズなどに依存
📝 練習問題
- 基本テスト: redis-benchmarkを使用してSETとGET操作をテストしましょう
- パイプラインテスト: パイプラインありとなしのパフォーマンスを比較しましょう
- 最適化テスト: 異なる設定パラメータを試して、パフォーマンスの変化を観察しましょう
次のレッスン
次のレッスンでは、Redis Pipeliningについて学びます。パイプラインの原理と使用方法を理解します。



