Redis CLI徹底解説:開発者が知っておくべきコマンドとテクニック
Redis CLI (Redis Command Line Interface) は、Redisデータベースを操作するための強力なコマンドラインツールです。開発者は、Redis CLI を使ってデータの読み書き、サーバーの構成管理、パフォーマンス監視など、様々なタスクを実行できます。本記事では、Redis CLI の基本的な使い方から、より高度なテクニックまで、開発者が知っておくべき情報を網羅的に解説します。
1. Redis CLIとは何か?
Redis CLI は、Redisサーバーと対話するためのコマンドラインインターフェースです。テキストベースのコマンドを発行し、Redisサーバーからのレスポンスを受け取ることで、データベースの操作や管理を行います。Redis CLI は、Redisサーバーのインストール時に自動的にインストールされることが多く、開発環境や本番環境での利用に適しています。
Redis CLI の主な用途:
- データ操作: データの追加、取得、更新、削除などの基本的な操作を行います。
- サーバー管理: Redisサーバーの設定変更、シャットダウン、再起動などの管理タスクを実行します。
- パフォーマンス監視: Redisサーバーのパフォーマンスに関する情報を収集し、監視します。
- デバッグ: Redisデータベースの状態を調査し、問題の特定や解決を行います。
- スクリプト実行: Redis Luaスクリプトを実行し、複雑なデータ操作や処理を自動化します。
2. Redis CLI のインストールと接続
Redis CLI は、通常、Redisサーバーのインストール時に自動的にインストールされます。もしインストールされていない場合は、Redis 公式サイトからダウンロードし、インストールしてください。
Redis CLI への接続:
Redis CLI を起動するには、ターミナルまたはコマンドプロンプトで redis-cli
コマンドを実行します。
bash
redis-cli
デフォルトでは、Redis CLI はローカルホスト (127.0.0.1) のポート 6379 に接続を試みます。もし異なるホストやポートに接続する必要がある場合は、-h
オプションでホストを指定し、-p
オプションでポートを指定します。
bash
redis-cli -h <host> -p <port>
例:
bash
redis-cli -h 192.168.1.100 -p 7000
認証:
Redisサーバーが認証を必要とする場合は、-a
オプションでパスワードを指定します。
bash
redis-cli -a <password>
例:
bash
redis-cli -a mysecretpassword
3. Redis CLI の基本的な使い方
Redis CLI は、コマンドを入力して Enter キーを押すことで、Redisサーバーにコマンドを送信します。Redisサーバーからのレスポンスは、ターミナルまたはコマンドプロンプトに表示されます。
基本的なコマンド:
- PING: Redisサーバーが正常に動作しているか確認します。
bash
PING
レスポンス:
PONG
- SET: 指定されたキーに値を設定します。
bash
SET mykey "Hello Redis"
レスポンス:
OK
- GET: 指定されたキーに対応する値を取得します。
bash
GET mykey
レスポンス:
"Hello Redis"
- DEL: 指定されたキーを削除します。
bash
DEL mykey
レスポンス:
(integer) 1
- EXISTS: 指定されたキーが存在するか確認します。
bash
EXISTS mykey
レスポンス:
(integer) 0 // キーが存在しない
bash
SET mykey "Hello Redis"
EXISTS mykey
レスポンス:
(integer) 1 // キーが存在する
- KEYS: 指定されたパターンに一致するすべてのキーを取得します。
bash
KEYS * // すべてのキーを取得
レスポンス:
1) "key1"
2) "key2"
3) "mykey"
ワイルドカード:
KEYS
コマンドでは、ワイルドカードを使用することができます。
*
: 任意の文字列にマッチします。?
: 任意の1文字にマッチします。[]
: 指定された文字のいずれかにマッチします。
例:
bash
KEYS user* // "user" で始まるすべてのキーを取得
KEYS user? // "user" に続く任意の1文字のキーを取得 (例: user1, user2)
KEYS user[1-5] // "user" に続く1から5までの数字のキーを取得 (例: user1, user2, ..., user5)
4. Redisのデータ型と操作
Redis は、文字列 (String)、リスト (List)、セット (Set)、ハッシュ (Hash)、ソート済みセット (Sorted Set) などの様々なデータ型をサポートしています。それぞれのデータ型には、固有のコマンドが用意されています。
4.1 文字列 (String)
文字列は、最も基本的なデータ型です。キーに対応する値を文字列として保存します。
- SET: キーに値を設定します。
bash
SET mykey "Hello Redis"
- GET: キーに対応する値を取得します。
bash
GET mykey
- GETRANGE: 文字列の一部を取得します。
bash
GETRANGE mykey 0 5 // インデックス 0 から 5 までの文字を取得
- SETRANGE: 文字列の一部を置換します。
bash
SETRANGE mykey 6 "World" // インデックス 6 以降を "World" で置換
- MSET: 複数のキーに複数の値を設定します。
bash
MSET key1 "value1" key2 "value2" key3 "value3"
- MGET: 複数のキーに対応する複数の値を取得します。
bash
MGET key1 key2 key3
- INCR: キーの値をインクリメントします (数値の場合)。
bash
SET counter 10
INCR counter
GET counter // 11
- DECR: キーの値をデクリメントします (数値の場合)。
bash
SET counter 10
DECR counter
GET counter // 9
- APPEND: 文字列の末尾に文字列を追加します。
bash
SET mykey "Hello"
APPEND mykey " Redis"
GET mykey // "Hello Redis"
4.2 リスト (List)
リストは、順序付けられた文字列のコレクションです。リストの先頭または末尾に要素を追加したり、削除したりできます。
- LPUSH: リストの先頭に要素を追加します。
bash
LPUSH mylist "item1"
LPUSH mylist "item2"
LPUSH mylist "item3"
- RPUSH: リストの末尾に要素を追加します。
bash
RPUSH mylist "item4"
RPUSH mylist "item5"
- LPOP: リストの先頭から要素を削除し、その要素を返します。
bash
LPOP mylist
- RPOP: リストの末尾から要素を削除し、その要素を返します。
bash
RPOP mylist
- LRANGE: リストの指定された範囲の要素を取得します。
bash
LRANGE mylist 0 -1 // リストのすべての要素を取得
LRANGE mylist 0 2 // リストの最初の3つの要素を取得
- LLEN: リストの長さを取得します。
bash
LLEN mylist
- LINDEX: リストの指定されたインデックスの要素を取得します。
bash
LINDEX mylist 1 // リストのインデックス1の要素を取得
- LSET: リストの指定されたインデックスの要素を置換します。
bash
LSET mylist 1 "new_item" // リストのインデックス1の要素を "new_item" で置換
- LREM: リストから指定された要素を削除します。
bash
LREM mylist 2 "item1" // リストから "item1" を 2個削除
4.3 セット (Set)
セットは、順序付けられていない一意の文字列のコレクションです。セットに要素を追加したり、削除したり、セット間の演算 (和集合、積集合、差集合) を行うことができます。
- SADD: セットに要素を追加します。
bash
SADD myset "item1"
SADD myset "item2"
SADD myset "item3"
- SREM: セットから要素を削除します。
bash
SREM myset "item1"
- SMEMBERS: セットのすべての要素を取得します。
bash
SMEMBERS myset
- SISMEMBER: セットに指定された要素が含まれているか確認します。
bash
SISMEMBER myset "item2"
- SCARD: セットの要素数を取得します。
bash
SCARD myset
- SPOP: セットからランダムに要素を削除し、その要素を返します。
bash
SPOP myset
- SRANDMEMBER: セットからランダムに要素を返します (削除はしません)。
bash
SRANDMEMBER myset
- SUNION: 複数のセットの和集合を返します。
bash
SUNION set1 set2 set3
- SINTER: 複数のセットの積集合を返します。
bash
SINTER set1 set2 set3
- SDIFF: 複数のセットの差集合を返します。
bash
SDIFF set1 set2 set3
4.4 ハッシュ (Hash)
ハッシュは、フィールドと値のペアを保持するデータ構造です。ハッシュは、オブジェクトの表現や設定情報の保存などに適しています。
- HSET: ハッシュの指定されたフィールドに値を設定します。
bash
HSET myhash field1 "value1"
HSET myhash field2 "value2"
HSET myhash field3 "value3"
- HGET: ハッシュの指定されたフィールドに対応する値を取得します。
bash
HGET myhash field1
- HMSET: ハッシュの複数のフィールドに複数の値を設定します。
bash
HMSET myhash field1 "value1" field2 "value2" field3 "value3"
- HMGET: ハッシュの複数のフィールドに対応する複数の値を取得します。
bash
HMGET myhash field1 field2 field3
- HGETALL: ハッシュのすべてのフィールドと値を取得します。
bash
HGETALL myhash
- HDEL: ハッシュから指定されたフィールドを削除します。
bash
HDEL myhash field1
- HEXISTS: ハッシュに指定されたフィールドが存在するか確認します。
bash
HEXISTS myhash field2
- HLEN: ハッシュのフィールド数を取得します。
bash
HLEN myhash
- HKEYS: ハッシュのすべてのフィールドを取得します。
bash
HKEYS myhash
- HVALS: ハッシュのすべての値を取得します。
bash
HVALS myhash
- HINCRBY: ハッシュの指定されたフィールドの値をインクリメントします (数値の場合)。
bash
HINCRBY myhash counter 10
4.5 ソート済みセット (Sorted Set)
ソート済みセットは、スコアと値のペアを保持するデータ構造です。ソート済みセットは、スコアに基づいて要素をソートして保存し、スコア範囲による要素の取得や、ランキングの計算などに適しています。
- ZADD: ソート済みセットに要素を追加します。
bash
ZADD mysortedset 10 "item1"
ZADD mysortedset 20 "item2"
ZADD mysortedset 15 "item3"
- ZREM: ソート済みセットから要素を削除します。
bash
ZREM mysortedset "item1"
- ZRANGE: ソート済みセットの指定された範囲の要素をスコアの昇順で取得します。
bash
ZRANGE mysortedset 0 -1 // すべての要素をスコアの昇順で取得
ZRANGE mysortedset 0 1 // 最初の2つの要素をスコアの昇順で取得
- ZREVRANGE: ソート済みセットの指定された範囲の要素をスコアの降順で取得します。
bash
ZREVRANGE mysortedset 0 -1 // すべての要素をスコアの降順で取得
ZRANGE mysortedset 0 1 // 最初の2つの要素をスコアの降順で取得
- ZRANGEBYSCORE: スコアの範囲を指定して、ソート済みセットの要素を取得します。
bash
ZRANGEBYSCORE mysortedset 10 20 // スコアが 10 から 20 までの要素を取得
- ZREVRANGEBYSCORE: スコアの範囲を指定して、ソート済みセットの要素をスコアの降順で取得します。
bash
ZREVRANGEBYSCORE mysortedset 20 10 // スコアが 20 から 10 までの要素をスコアの降順で取得
- ZSCORE: ソート済みセットの指定された要素のスコアを取得します。
bash
ZSCORE mysortedset "item2"
- ZCARD: ソート済みセットの要素数を取得します。
bash
ZCARD mysortedset
- ZCOUNT: スコアの範囲を指定して、ソート済みセットの要素数を取得します。
bash
ZCOUNT mysortedset 10 20 // スコアが 10 から 20 までの要素数を取得
- ZINCRBY: ソート済みセットの指定された要素のスコアをインクリメントします。
bash
ZINCRBY mysortedset 5 "item2" // "item2" のスコアを 5 インクリメント
5. Redis CLI の高度なテクニック
Redis CLI は、より複雑なタスクを実行するための高度な機能も提供しています。
5.1 パイプライン処理 (Pipelining)
パイプライン処理は、複数のコマンドをまとめてRedisサーバーに送信し、まとめてレスポンスを受け取ることで、ネットワークのオーバーヘッドを削減し、パフォーマンスを向上させるテクニックです。
bash
redis-cli pipeline <<EOF
SET key1 "value1"
SET key2 "value2"
GET key1
GET key2
EOF
5.2 Lua スクリプト (Lua Scripting)
Lua スクリプトを使用すると、Redisサーバー内で複雑なデータ操作や処理を原子的に実行できます。Lua スクリプトは、Redis CLI を通じて実行できます。
bash
redis-cli eval "return redis.call('GET', KEYS[1])" 1 mykey
5.3 Pub/Sub (Publish/Subscribe)
Redis は、Pub/Sub パターンをサポートしています。Redis CLI を使って、チャンネルにメッセージを発行したり、チャンネルを購読したりできます。
“`bash
パブリッシャー
redis-cli PUBLISH mychannel “Hello subscribers!”
サブスクライバー
redis-cli SUBSCRIBE mychannel
“`
5.4 トランザクション (Transactions)
Redis は、トランザクションをサポートしています。トランザクションを使用すると、複数のコマンドをまとめて実行し、すべて成功するか、すべて失敗するかのいずれかを保証できます。
bash
redis-cli MULTI
SET key1 "value1"
SET key2 "value2"
EXEC
5.5 Redis Cluster
Redis Cluster は、複数の Redis ノードを連携させて、データのシャーディングと高可用性を実現する仕組みです。Redis CLI は、Redis Cluster の操作をサポートしています。
bash
redis-cli -c -h <cluster_host> -p <cluster_port> CLUSTER INFO
6. Redis CLI の活用事例
- キャッシュのクリア: Redis をキャッシュとして使用している場合、特定のキーまたはすべてのキーを Redis CLI を使ってクリアできます。
bash
DEL key1 key2 key3 // 特定のキーを削除
FLUSHDB // 現在のデータベースを削除
FLUSHALL // すべてのデータベースを削除
- データのバックアップ: Redis CLI を使って、Redis データベースをバックアップできます。
bash
redis-cli BGSAVE // バックグラウンドでデータベースを保存
- デバッグ: Redis CLI を使って、Redis データベースの状態を調査し、問題の特定や解決を行います。
bash
INFO // Redisサーバーの情報を取得
DEBUG OBJECT mykey // キーに関するデバッグ情報を取得
- スクリプトの実行: Lua スクリプトを実行して、複雑なデータ操作や処理を自動化します。
bash
redis-cli eval "return redis.call('SET', KEYS[1], ARGV[1])" 1 mykey "myvalue"
7. まとめ
Redis CLI は、Redisデータベースを操作するための非常に強力なツールです。本記事で解説したコマンドとテクニックをマスターすることで、Redis をより効果的に活用し、アプリケーションのパフォーマンスと信頼性を向上させることができます。Redis CLI は、開発者の必須ツールと言えるでしょう。
さらに学習するために:
- Redis 公式ドキュメント: https://redis.io/
- Redis コマンドリファレンス: https://redis.io/commands
この記事が、あなたの Redis CLI の学習と実践に役立つことを願っています。