Redis CLIとは:基礎知識と導入方法
Redis CLIの役割と重要性
Redis CLIは、Redisデータベースを対話的に操作するためのコマンドラインインターフェースです。システム管理者やデベロッパーにとって、以下の点で重要な役割を果たします:
- データベースの直接操作と監視
- デバッグやトラブルシューティング
- バックアップとリストア操作
- パフォーマンスの分析と最適化
- 運用自動化のためのスクリプト実行
Redis CLIのインストール手順
Redis CLIは、Redisサーバーのインストール時に自動的に含まれます。主要なOSごとのインストール方法を紹介します:
Ubuntu/Debian系
# パッケージの更新とRedisのインストール sudo apt update sudo apt install redis-server # バージョンの確認 redis-cli --version
CentOS/RHEL系
# EPELリポジトリの有効化 sudo yum install epel-release # Redisのインストール sudo yum install redis # サービスの起動 sudo systemctl start redis
macOS (Homebrew使用)
# Homebrewを使用してインストール brew install redis # サービスの起動 brew services start redis
Redis CLIの基本的な接続設定
Redis CLIの基本的な接続設定には、以下のパラメータが重要です:
| パラメータ | 説明 | デフォルト値 |
|---|---|---|
| host | 接続先ホスト名 | localhost |
| port | ポート番号 | 6379 |
| password | 認証パスワード | なし |
| database | データベース番号 | 0 |
基本的な接続コマンド例:
# 基本的な接続(localhost:6379) redis-cli # 特定のホストとポートに接続 redis-cli -h redis.example.com -p 6380 # パスワード認証を使用した接続 redis-cli -a your_password # 特定のデータベースに接続 redis-cli -n 1
セキュリティのベストプラクティス:
- プロダクション環境では必ずパスワード認証を有効にする
- 信頼できないネットワークでの接続には必ずSSL/TLSを使用
- パスワードをコマンドラインで直接指定する代わりに、環境変数を使用
- 接続タイムアウトの適切な設定
これらの基本的な知識と設定を押さえることで、Redis CLIを使用した効率的なデータベース操作の土台が整います。
Redis CLIの基本的な使い方
対話モードでの操作方法
Redis CLIの対話モードは、直接的にRedisサーバーとやり取りができる強力なインターフェースです。
基本的な操作の流れ
- 対話モードの起動
redis-cli
- プロンプトの見方
127.0.0.1:6379> # デフォルトの表示形式 # [IPアドレス]:[ポート番号]>
- 基本的なデータ操作
# 文字列の保存と取得 127.0.0.1:6379> SET user:1:name "John Doe" OK 127.0.0.1:6379> GET user:1:name "John Doe" # リストの操作 127.0.0.1:6379> LPUSH tasks "レポート作成" (integer) 1 127.0.0.1:6379> LPUSH tasks "メール確認" (integer) 2 127.0.0.1:6379> LRANGE tasks 0 -1 1) "メール確認" 2) "レポート作成"
コマンドラインからの実行方法
コマンドラインから直接Redisコマンドを実行する方法は、スクリプトやバッチ処理に特に有用です。
直接コマンド実行の例
# 単一コマンドの実行 redis-cli SET server:status "running" # 複数コマンドの実行 redis-cli <<EOF SET server:status "running" INCR visitors GET server:status EOF # 特定のデータベースに対するコマンド実行 redis-cli -n 1 GET user:profile # 出力フォーマットの指定 redis-cli --raw GET user:name # 生の文字列として出力 redis-cli --csv LRANGE users 0 -1 # CSV形式で出力
実用的なワンライナーコマンド例
# キーの検索とカウント redis-cli keys "user:*" | wc -l # 特定パターンのキーの削除 redis-cli --scan --pattern "temp:*" | xargs redis-cli DEL # バックアップの作成 redis-cli SAVE
ヘルプコマンドの活用術
Redis CLIには充実したヘルプ機能が組み込まれており、コマンドの使い方を素早く確認できます。
1. コマンド一覧の表示
127.0.0.1:6379> HELP
redis-cli 6.0.9
To get help about Redis commands type:
"help @<group>" to get a list of commands in <group>
"help <command>" for help on <command>
"help <tab>" to get a list of possible help topics
"quit" to exit
2. 特定のコマンドグループの表示
127.0.0.1:6379> HELP @string # 文字列関連コマンドの一覧が表示されます
3. 特定のコマンドの詳細表示
127.0.0.1:6379> HELP SET SET key value [EX seconds] [PX milliseconds] [NX|XX] summary: Set the string value of a key since: 1.0.0 group: string
効率的なヘルプの使い方のコツ
| コマンドグループ | 説明 | 使用例 |
|---|---|---|
| @string | 文字列操作 | HELP @string |
| @list | リスト操作 | HELP @list |
| @hash | ハッシュ操作 | HELP @hash |
| @set | セット操作 | HELP @set |
| @sorted_set | ソート済みセット操作 | HELP @sorted_set |
| @generic | 汎用コマンド | HELP @generic |
| @transaction | トランザクション関連 | HELP @transaction |
これらのヘルプコマンドを効果的に活用することで、必要な情報にすばやくアクセスし、Redis CLIの機能を最大限に活用することができます。
実務で使える15の重要コマンド
データの読み書きに関するコマンド
データの読み書きは、Redis操作の基本となる重要な操作です。以下に、実務でよく使用される主要なコマンドを紹介します。
1. 基本的なデータ操作
# 値の設定と取得
SET key value [EX seconds] [PX milliseconds] [NX|XX]
GET key
# 使用例:セッションデータの保存(1時間の有効期限付き)
SET session:user123 "{name: 'John', role: 'admin'}" EX 3600
# 複数の値を一度に設定・取得
MSET key1 value1 key2 value2
MGET key1 key2
2. 有効期限の操作
# キーの有効期限を設定 EXPIRE key seconds TTL key # 残り時間を確認 # 使用例:一時的なレート制限の実装 SET rate:limit:user123 5 EXPIRE rate:limit:user123 60 # 60秒後に自動削除
キー操作に関するコマンド
キーの管理と操作は、効率的なデータベース運用に不可欠です。
3. キーの検索と管理
# パターンマッチによるキーの検索 KEYS pattern SCAN cursor [MATCH pattern] [COUNT count] # 使用例:すべてのユーザーキーを検索 SCAN 0 MATCH "user:*" COUNT 100 # キーの存在確認と削除 EXISTS key DEL key [key ...]
4. キー情報の取得
# キーの型を確認 TYPE key # キーのデバッグ情報 DEBUG OBJECT key # メモリ使用量の確認 MEMORY USAGE key
データベース管理コマンド
データベース全体の管理と保守に関する重要なコマンドです。
5. データベース操作
# データベースの選択 SELECT index # データベースのフラッシュ FLUSHDB # 現在のDB FLUSHALL # 全DB # キー数の取得 DBSIZE
6. 永続化操作
# バックアップの作成 SAVE # 同期的に実行 BGSAVE # 非同期的に実行 # 最後の保存状態を確認 LASTSAVE
モニタリングとデバッグコマンド
システムの状態監視とトラブルシューティングに必要不可欠なコマンドです。
7. 情報取得コマンド
# サーバー情報の取得 INFO [section] # クライアント一覧の取得 CLIENT LIST # スロークエリの分析 SLOWLOG GET [count]
8. モニタリングコマンド
# リアルタイムコマンドモニタリング MONITOR # メモリ使用状況の確認 INFO memory
よく使用される15コマンドの一覧表
| コマンド | 用途 | 使用例 |
|---|---|---|
| SET | 値の設定 | SET key value |
| GET | 値の取得 | GET key |
| DEL | キーの削除 | DEL key |
| EXISTS | キーの存在確認 | EXISTS key |
| EXPIRE | 有効期限の設定 | EXPIRE key 3600 |
| KEYS | キーの検索 | KEYS user:* |
| SCAN | 安全なキー検索 | SCAN 0 MATCH user:* |
| INFO | システム情報取得 | INFO memory |
| MONITOR | リアルタイム監視 | MONITOR |
| SAVE | DBの永続化 | SAVE |
| SELECT | DB選択 | SELECT 1 |
| CLIENT LIST | クライアント一覧 | CLIENT LIST |
| SLOWLOG | スロークエリ分析 | SLOWLOG GET 10 |
| MEMORY USAGE | メモリ使用量確認 | MEMORY USAGE key |
| CONFIG GET | 設定値の取得 | CONFIG GET maxmemory |
これらのコマンドを適切に組み合わせることで、効率的なデータベース運用が可能になります。
Redis CLIを使った効率的なデータ管理
大量データの効率的な操作方法
大規模なデータセットを扱う際は、効率的な操作方法を知ることが重要です。以下に主要なテクニックを紹介します。
1. SCANコマンドの活用
# KEYSコマンドの代わりにSCANを使用 # KEYSは全件検索で重い処理になるため、本番環境では避ける SCAN 0 MATCH "user:*" COUNT 100 # 実行例と結果の説明 127.0.0.1:6379> SCAN 0 MATCH "user:*" COUNT 100 1) "176" # 次のイテレーションで使用するカーソル 2) 1) "user:1" 2) "user:2" 3) "user:3"
2. パイプラインを使用した一括処理
# パイプラインコマンドの例
cat << EOF | redis-cli --pipe
SET user:1:name "John"
SET user:1:email "john@example.com"
SET user:1:age "30"
EOF
# 大量のデータインポート例
for i in {1..1000}; do
echo "SET key:$i value:$i"
done | redis-cli --pipe
パイプラインを使った高速処理
パイプラインは複数のコマンドをまとめて実行することで、ネットワークのラウンドトリップを削減し、処理速度を向上させます。
1. パイプラインの基本的な使用方法
# 通常の逐次実行 SET key1 value1 SET key2 value2 SET key3 value3 # パイプライン実行(より高速) cat << EOF | redis-cli SET key1 value1 SET key2 value2 SET key3 value3 EOF
2. パイプラインを使用した効率的なデータ移行
#!/bin/bash
# データ移行スクリプト例
redis-cli KEYS "source:*" | while read key; do
redis-cli GET "$key" | sed "s/^/SET destination:${key#source:} /"
done | redis-cli -n 1 --pipe
パイプライン処理のパフォーマンス比較
| 処理方法 | 1000件の処理時間 | メモリ使用量 | ネットワーク負荷 |
|---|---|---|---|
| 逐次実行 | 約2000ms | 低 | 高 |
| パイプライン | 約200ms | 中 | 低 |
| マルチパイプライン | 約100ms | 高 | 最小 |
バックアップとリストアの実践的な方法
データの安全な保管と復元は、運用において重要な要素です。
1. データのバックアップ
# RDBファイルの作成 redis-cli SAVE # バックアップファイルのコピー cp /var/lib/redis/dump.rdb backup/dump_$(date +%Y%m%d).rdb # AOFファイルのバックアップ cp /var/lib/redis/appendonly.aof backup/appendonly_$(date +%Y%m%d).aof
2. 特定のキーパターンのバックアップ
# 特定パターンのキーをエクスポート
redis-cli --scan --pattern "user:*" | while read key; do
redis-cli DUMP "$key" | hex > "backup/${key//:/\_}.dump"
done
3. データのリストア
# RDBファイルからのリストア systemctl stop redis cp backup/dump.rdb /var/lib/redis/ systemctl start redis # 特定キーのリストア cat backup/user_1.dump | redis-cli -x RESTORE "user:1" 0
効率的なバックアップ戦略
| バックアップ種別 | 用途 | メリット | デメリット |
|---|---|---|---|
| RDB | 定期バックアップ | 単一ファイル、高速 | データロス可能性 |
| AOF | リアルタイム | データ損失最小 | ファイルサイズ大 |
| 差分バックアップ | 増分バックアップ | 効率的な保存 | 復元が複雑 |
これらの手法を組み合わせることで、大規模なRedisデータベースでも効率的な運用が可能になります。特に本番環境では、パイプラインの活用とバックアップ戦略の適切な選択が重要です。
Redis CLIのトラブルシューティング
よくある接続エラーとその解決方法
Redis CLIを使用する際によく遭遇する接続問題とその解決方法を解説します。
1. 接続拒否エラー
# エラーメッセージ例 Error: Connection refused # 確認項目と解決方法 # 1. Redisサーバーの稼働確認 systemctl status redis # 2. ポートの確認 netstat -an | grep 6379 # 3. bindアドレスの確認 redis-cli CONFIG GET bind
2. 認証エラー
# エラーメッセージ例 (error) NOAUTH Authentication required. # 解決方法 # パスワード付きで接続 redis-cli -a your_password # 環境変数を使用(推奨) export REDISCLI_AUTH=your_password redis-cli
よくある接続エラーの対処方法一覧
| エラー | 原因 | 解決方法 |
|---|---|---|
| Connection refused | サーバー停止/ポート閉鎖 | サービス再起動、ポート開放 |
| Authentication required | 認証設定の不一致 | 正しいパスワードの設定 |
| Connection timed out | ネットワーク問題 | ファイアウォール設定確認 |
| Cannot assign requested address | バインド設定の問題 | redis.conf のbind設定修正 |
パフォーマンス問題の診断と対策
パフォーマンスの問題を特定し、解決するための手順を説明します。
1. スロークエリの分析
# スロークエリログの確認 SLOWLOG GET 10 # スロークエリログの詳細 SLOWLOG RESET # ログのリセット CONFIG SET slowlog-log-slower-than 10000 # 10ms以上を記録
2. メモリ使用状況の分析
# メモリ情報の取得 INFO memory # キーごとのメモリ使用量 redis-cli --bigkeys # メモリ使用量の詳細分析 MEMORY DOCTOR
パフォーマンス改善のためのチェックリスト
- メモリ使用量の監視
- スロークエリの定期的な確認
- ネットワークレイテンシの測定
- キー数とデータ構造の最適化
- 適切なデータ削除戦略の実装
セキュリティ関連の注意点と対策
セキュリティリスクを最小限に抑えるための重要な設定と対策を解説します。
1. 基本的なセキュリティ設定
# パスワード設定 CONFIG SET requirepass "your_strong_password" # 接続制限の設定 CONFIG SET maxclients 10000 # 危険なコマンドの無効化 rename-command FLUSHALL "" rename-command FLUSHDB ""
2. SSL/TLS接続の設定
# SSL/TLS接続の使用 redis-cli -h hostname -p port --tls --cert /path/to/cert.pem --key /path/to/key.pem
セキュリティ対策チェックリスト
| 対策 | 目的 | 実装方法 |
|---|---|---|
| パスワード認証 | 不正アクセス防止 | requirepass設定 |
| ネットワーク制限 | アクセス制御 | bind設定、firewall |
| コマンド制限 | 危険な操作の防止 | rename-command |
| SSL/TLS | 通信の暗号化 | 証明書設定 |
| アクセスログ | 監査証跡の確保 | ログ設定 |
セキュリティベストプラクティス
- 強力なパスワードの使用
- 定期的なパスワード変更
- 必要最小限のコマンド許可
- アクセスログの定期的な監査
- セキュリティアップデートの適用
- バックアップデータの暗号化
- 定期的なセキュリティ監査の実施
これらの対策を適切に実装することで、安全で安定したRedis環境を維持することができます。
Redis CLIの実践的な運用テクニック
本番環境での安全な運用手法
本番環境でのRedis CLI操作には細心の注意が必要です。以下に安全な運用のためのベストプラクティスを紹介します。
1. 操作前の安全確認手順
# 接続先の確認(本番環境への誤接続防止) redis-cli INFO server | grep config_file # 現在の負荷状況の確認 redis-cli INFO stats | grep instantaneous_ops_per_sec # クライアント接続数の確認 redis-cli INFO clients | grep connected_clients
2. 危険なコマンドの実行制御
# 実行前の確認プロンプト付きラッパースクリプト
#!/bin/bash
dangerous_commands="FLUSHALL|FLUSHDB|DEL|DROP"
if echo "$1" | grep -E "$dangerous_commands" > /dev/null; then
read -p "危険なコマンドです。実行しますか? (y/n): " confirm
[ "$confirm" != "y" ] && exit 1
fi
redis-cli "$@"
本番環境での操作ガイドライン
| 操作カテゴリ | 実施前の確認事項 | 実施後の確認事項 |
|---|---|---|
| データ変更 | バックアップ取得、影響範囲の確認 | データ整合性チェック |
| 設定変更 | 現在値の保存、変更影響の評価 | サービス正常性確認 |
| キー削除 | 対象キーの棚卸し、依存関係確認 | 関連機能の動作確認 |
| パフォーマンスチューニング | ベースライン測定 | メトリクス改善の確認 |
自動化スクリプトでの活用方法
運用業務を効率化するための実用的な自動化スクリプトを紹介します。
1. 定期メンテナンス自動化スクリプト
#!/bin/bash
# Redis定期メンテナンススクリプト
# 設定値
MAX_MEMORY_USAGE=80 # メモリ使用率の閾値(%)
MAX_CLIENTS=5000 # 最大クライアント数の閾値
BACKUP_DIR="/var/backups/redis"
# メモリ使用率チェックと警告
check_memory() {
local memory_usage=$(redis-cli INFO memory | grep "used_memory_peak_perc" | cut -d: -f2)
if (( $(echo "$memory_usage > $MAX_MEMORY_USAGE" | bc -l) )); then
echo "警告: メモリ使用率が${memory_usage}%です"
# メモリ削減のための処理
redis-cli MEMORY PURGE
fi
}
# スロークエリの検出と記録
analyze_slow_queries() {
redis-cli SLOWLOG GET 10 > "$BACKUP_DIR/slowlog_$(date +%Y%m%d).log"
redis-cli SLOWLOG RESET
}
# キー分布の分析
analyze_keys() {
redis-cli --bigkeys > "$BACKUP_DIR/keyspace_$(date +%Y%m%d).log"
}
# メイン処理
check_memory
analyze_slow_queries
analyze_keys
2. 監視・アラート自動化スクリプト
#!/bin/bash
# Redis監視スクリプト
# Slack通知関数
notify_slack() {
local message="$1"
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"${message}\"}" \
"https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
}
# レプリケーション状態監視
check_replication() {
local replica_lag=$(redis-cli INFO replication | grep lag | cut -d: -f2)
if [ "$replica_lag" -gt 10 ]; then
notify_slack "警告: レプリケーション遅延が${replica_lag}秒発生しています"
fi
}
# 接続数監視
check_connections() {
local conn_count=$(redis-cli INFO clients | grep connected_clients | cut -d: -f2)
if [ "$conn_count" -gt "$MAX_CLIENTS" ]; then
notify_slack "警告: クライアント接続数が閾値を超えています(${conn_count})"
fi
}
モニタリングとアラートの設定
効果的なモニタリング体制の構築方法について解説します。
1. 重要メトリクスの監視項目
| メトリクス | コマンド | 閾値設定例 | アラート重要度 |
|---|---|---|---|
| メモリ使用率 | INFO memory | 80% | 高 |
| CPU使用率 | INFO stats | 70% | 中 |
| キャッシュヒット率 | INFO stats | 90%以下 | 中 |
| レプリケーション遅延 | INFO replication | 10秒以上 | 高 |
| 接続クライアント数 | INFO clients | 設定最大値の80% | 中 |
2. アラート設定のベストプラクティス
# アラートルール設定例
redis-cli CONFIG SET notify-keyspace-events AKE
# メトリクス収集スクリプト
#!/bin/bash
while true; do
# メモリ使用率の記録
redis-cli INFO memory | grep "used_memory_human" >> /var/log/redis/memory.log
# 操作数の記録
redis-cli INFO stats | grep "instantaneous_ops_per_sec" >> /var/log/redis/ops.log
# レイテンシの記録
redis-cli --latency-history >> /var/log/redis/latency.log
sleep 60
done
これらのスクリプトと設定を適切に組み合わせることで、安定した Redis の運用が可能になります。特に本番環境では、自動化されたモニタリングと迅速なアラート通知が重要です。