Redis CLIの使い方完全ガイド:15の実用的なコマンドと運用テクニック

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サーバーとやり取りができる強力なインターフェースです。

基本的な操作の流れ

  1. 対話モードの起動
redis-cli
  1. プロンプトの見方
127.0.0.1:6379> # デフォルトの表示形式
# [IPアドレス]:[ポート番号]> 
  1. 基本的なデータ操作
# 文字列の保存と取得
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
SAVEDBの永続化SAVE
SELECTDB選択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. メモリ使用量の監視
  2. スロークエリの定期的な確認
  3. ネットワークレイテンシの測定
  4. キー数とデータ構造の最適化
  5. 適切なデータ削除戦略の実装

セキュリティ関連の注意点と対策

セキュリティリスクを最小限に抑えるための重要な設定と対策を解説します。

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通信の暗号化証明書設定
アクセスログ監査証跡の確保ログ設定

セキュリティベストプラクティス

  1. 強力なパスワードの使用
  2. 定期的なパスワード変更
  3. 必要最小限のコマンド許可
  4. アクセスログの定期的な監査
  5. セキュリティアップデートの適用
  6. バックアップデータの暗号化
  7. 定期的なセキュリティ監査の実施

これらの対策を適切に実装することで、安全で安定した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 memory80%
CPU使用率INFO stats70%
キャッシュヒット率INFO stats90%以下
レプリケーション遅延INFO replication10秒以上
接続クライアント数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 の運用が可能になります。特に本番環境では、自動化されたモニタリングと迅速なアラート通知が重要です。