Redis 高度なキー管理

RedisBeginner
オンラインで実践に進む

はじめに

この実験(Lab)では、Redis の高度なキー管理テクニックを探求します。まず、RENAME コマンドを使用してキーの名前を変更する方法を学びます。redis-cli を介して Redis サーバーに接続し、キーと値のペアを設定し、名前を変更し、変更を確認します。

次に、MOVE コマンドを使用して、異なる Redis データベース間でキーを移動する方法を学びます。この実験(Lab)では、Redis インスタンス内のデータベース間でキーを転送するプロセスを説明します。また、複数のキーの設定と取得、および効率的なキーの反復処理についても説明します。

RENAME コマンドでキーの名前を変更する

このステップでは、Redis で RENAME コマンドを使用してキーの名前を変更する方法を学びます。キーの名前の変更は、タイプミスを修正したり、データを再編成したり、アプリケーションの変更を反映するようにキー名を更新したりするなど、さまざまな理由で役立ちます。

まず、Redis コマンドラインインターフェース(redis-cli)を使用して Redis サーバーに接続しましょう。~/project ディレクトリでターミナルを開き、次のコマンドを入力します。

redis-cli

Redis プロンプト 127.0.0.1:6379> が表示されるはずです。

次に、名前を変更できるキーと値のペアを設定しましょう。SET コマンドを使用して、mykey という名前のキーに myvalue という値を設定します。

SET mykey myvalue

OK という出力が表示されるはずです。

キーが正しく設定されていることを確認するには、GET コマンドを使用します。

GET mykey

"myvalue" という出力が表示されるはずです。

次に、RENAME コマンドを使用して、キー mykey の名前を newkey に変更します。

RENAME mykey newkey

OK という出力が表示されるはずです。

キーの名前が変更されたことを確認するには、古いキー(mykey)の値を取得してみます。

GET mykey

(nil) という出力が表示されるはずです。これは、キーが存在しなくなったことを意味します。

次に、新しいキー(newkey)の値を取得してみます。

GET newkey

"myvalue" という出力が表示されるはずです。これは、キーの名前が正常に変更されたことを確認します。

最後に、次のステップのために、キー newkey の名前を mykey に戻しましょう。

RENAME newkey mykey

OK という出力が表示されるはずです。

キーの名前が元に戻ったことを確認します。

GET mykey

"myvalue" という出力が表示されるはずです。

exit と入力するか、Ctrl+D を押して redis-cli を終了することを忘れないでください。これにより、コマンドが適切に記録されます。

exit

これで、RENAME コマンドを使用して Redis でキーの名前を変更することに成功しました。

MOVE コマンドでデータベース間でキーを移動する

このステップでは、MOVE コマンドを使用して、ある Redis データベースから別のデータベースへキーを移動する方法を学びます。Redis は、単一のインスタンス内で複数の論理データベースをサポートしています。デフォルトでは、0 から 15 までの番号が付けられた 16 個のデータベースがあります。MOVE コマンドを使用すると、現在選択されているデータベースから別のデータベースへキーを転送できます。

まず、Redis コマンドラインインターフェース (redis-cli) を使用して Redis サーバーに接続していることを確認してください。~/project ディレクトリでターミナルを開き、次のコマンドを入力します。

redis-cli

Redis プロンプト 127.0.0.1:6379> が表示されるはずです。デフォルトでは、データベース 0 に接続されています。

前のステップで、データベース 0 に mykey という名前のキーと myvalue という値が既に存在します。これを確認しましょう。

GET mykey

"myvalue" という出力が表示されるはずです。

それでは、MOVE コマンドを使用して、キー mykey をデータベース 0 からデータベース 1 に移動してみましょう。

MOVE mykey 1

(integer) 1 という出力が表示されるはずです。これは、キーが正常に移動されたことを意味します。

キーが移動されたことを確認するために、データベース 0 でキー mykey の値を取得してみましょう。

GET mykey

(nil) という出力が表示されるはずです。これは、キーがデータベース 0 に存在しなくなったことを意味します。

次に、SELECT コマンドを使用してデータベース 1 に切り替えます。

SELECT 1

OK という出力が表示されるはずです。

それでは、データベース 1 でキー mykey の値を取得してみましょう。

GET mykey

"myvalue" という出力が表示されるはずです。これは、キーがデータベース 1 に正常に移動されたことを確認します。

最後に、次のステップのために、キー mykey をデータベース 0 に戻しましょう。まず、データベース 0 に戻ります。

SELECT 0

OK という出力が表示されるはずです。

それでは、キー mykey をデータベース 1 からデータベース 0 に移動してみましょう。

MOVE mykey 0

(error) ERR source and destination objects are the same という出力が表示されるはずです。

このエラーは、同じセッションで SELECT 0 を実行してから MOVE mykey 0 を実行したために発生します。MOVE コマンドは、キーを現在存在するデータベースと同じデータベースに移動することは許可されていません。

キーを別のデータベースに移動するには、最初に移動先のデータベースを選択してから MOVE コマンドを使用する必要があります。

たとえば、最初にデータベース 1 を選択します。

SELECT 1

OK という出力が表示されるはずです。

それでは、キー mykey をデータベース 1 からデータベース 0 に移動してみましょう。

MOVE mykey 0

(integer) 1 という出力が表示されるはずです。これは、キーが正常に移動されたことを意味します。

次に、データベース 0 に戻ります。

SELECT 0

キーがデータベース 0 に戻っていることを確認します。

GET mykey

"myvalue" という出力が表示されるはずです。

exit と入力するか、Ctrl+D を押して redis-cli を終了することを忘れないでください。これにより、コマンドが適切にログに記録されます。

exit

これで、MOVE コマンドを使用して Redis データベース間でキーを正常に移動できました。

MSET コマンドで複数のキーを設定する

このステップでは、Redis で MSET コマンドを使用して、複数のキーとそれに対応する値を 1 つのコマンドで設定する方法を学びます。これは、複数の SET コマンドを使用するよりも効率的です。Redis サーバーへのラウンドトリップの回数が減るためです。

まず、Redis コマンドラインインターフェース(redis-cli)を使用して Redis サーバーに接続していることを確認してください。まだ接続していない場合は、~/project ディレクトリでターミナルを開き、次のコマンドを入力します。

redis-cli

Redis プロンプト 127.0.0.1:6379> が表示されるはずです。

前のステップで、データベース 0 に mykey という名前のキーと myvalue という値が既に存在します。次に、MSET コマンドを使用して、さらに 2 つのキー key1key2 にそれぞれ value1value2 の値を設定しましょう。

MSET key1 value1 key2 value2

OK という出力が表示されるはずです。これは、キーが正常に設定されたことを意味します。

キーが正しく設定されていることを確認するには、各キーに対して GET コマンドを使用します。

GET key1

"value1" という出力が表示されるはずです。

GET key2

"value2" という出力が表示されるはずです。

次に、MSET を使用して、mykey を含む 3 つのキーを設定しましょう。

MSET mykey newvalue key3 value3 key4 value4

OK という出力が表示されるはずです。

値を確認します。

GET mykey

"newvalue" という出力が表示されるはずです。

GET key3

"value3" という出力が表示されるはずです。

GET key4

"value4" という出力が表示されるはずです。

exit と入力するか、Ctrl+D を押して redis-cli を終了することを忘れないでください。これにより、コマンドが適切に記録されます。

exit

これで、MSET コマンドを使用して複数のキーを設定することに成功しました。

MGET コマンドで複数のキーを取得する

このステップでは、Redis で MGET コマンドを使用して、複数のキーの値を 1 つのコマンドで取得する方法を学びます。これは、複数の GET コマンドを使用するよりも効率的です。Redis サーバーへのラウンドトリップの回数が減るためです。

まず、Redis コマンドラインインターフェース(redis-cli)を使用して Redis サーバーに接続していることを確認してください。~/project ディレクトリでターミナルを開き、次のコマンドを入力します。

redis-cli

Redis プロンプト 127.0.0.1:6379> が表示されるはずです。

前のステップでは、次のキーと値があります。

  • mykey: newvalue
  • key1: value1
  • key2: value2
  • key3: value3
  • key4: value4

次に、MGET コマンドを使用して、key1key2、および mykey の値を取得しましょう。

MGET key1 key2 mykey

次の出力が表示されるはずです。

1) "value1"
2) "value2"
3) "newvalue"

この出力は、MGET コマンドで指定された順序でキーの値を示しています。

次に、MGET コマンドを使用して、key3key4、および存在しないキー key5 の値を取得しましょう。

MGET key3 key4 key5

次の出力が表示されるはずです。

1) "value3"
2) "value4"
3) (nil)

存在しないキー key5 の値が (nil) であることに注意してください。

exit と入力するか、Ctrl+D を押して redis-cli を終了することを忘れないでください。これにより、コマンドが適切に記録されます。

exit

これで、MGET コマンドを使用して複数のキーを取得することに成功しました。

SCAN を使用した効率的なキーの反復処理

このステップでは、SCAN コマンドを使用して Redis 内のキーを効率的に反復処理する方法を学びます。大規模なデータベースで使用するとサーバーをブロックする可能性がある KEYS コマンドとは異なり、SCAN はカーソルベースのイテレータであり、キーをバッチで取得し、パフォーマンスへの影響を最小限に抑えます。

まず、Redis コマンドラインインターフェース (redis-cli) を使用して Redis サーバーに接続されていることを確認してください。~/project ディレクトリでターミナルを開き、次のコマンドを入力します。

redis-cli

Redis プロンプト 127.0.0.1:6379> が表示されるはずです。

前のステップから、次のキーがあります。

  • mykey
  • key1
  • key2
  • key3
  • key4

SCAN コマンドには、通常 0 である初期カーソル値が必要です。これは、次の反復処理のための新しいカーソル値と、現在の反復処理で見つかったキーのリストを返します。

カーソル 0 で反復処理を開始しましょう。

SCAN 0

次のような出力が表示されるはずです。

1) "0"
2) 1) "key2"
   2) "key3"
   3) "key4"
   4) "key1"
   5) "mykey"

出力の最初の要素 ("0") はカーソル値です。2 番目の要素は、この反復処理で見つかったキーの配列です。返されたカーソルが 0 であるため、これは反復処理が完了し、単一のスキャンですべてのキーを取得したことを示します。

MATCH オプションを使用して、パターンに基づいてキーをフィルタリングすることもできます。たとえば、key で始まるすべてのキーを検索するには、次のコマンドを使用します。

SCAN 0 MATCH key*

次のような出力が表示されるはずです。

1) "0"
2) 1) "key2"
   2) "key3"
   3) "key4"
   4) "key1"

カーソルは "0" であり、反復処理が完了したことを意味し、パターン "key*" に一致するキーのみが返されることがわかります ("mykey" を除く)。

COUNT オプションを使用して、1 回の呼び出しで取得する要素の数について Redis にヒントを与えることもできます。これは単なるヒントであり、Redis はより多いまたは少ない要素を返す可能性があることに注意してください。例:

SCAN 0 COUNT 3

次のような出力が表示されるはずです。

1) "6"
2) 1) "key2"
   2) "key3"
   3) "key4"

この場合、新しいカーソル値 "6" が得られ、スキャンするキーがさらにあることを示しています。カーソル "0" を受け取るまで、この新しいカーソル値を使用して反復処理を続行します。

exit と入力するか、Ctrl+D を押して redis-cli を終了することを忘れないでください。これにより、コマンドが適切にログに記録されます。

exit

これで、SCAN コマンドを使用して Redis 内のキーを正常に反復処理しました。

まとめ

この実験(Lab)では、Redis で高度なキー管理操作を実行する方法を学びました。具体的には、RENAME コマンドを使用してキーの名前を変更し、関連付けられた値を保持しながら識別子を変更しました。また、古いキー名と新しいキー名の両方を使用して値を取得することで、名前の変更が成功したことを検証し、操作後のキーの存在と値を確認する練習も行いました。最後に、後続のステップのために、キーの名前を元の名前に戻しました。

この実験(Lab)では、Redis データベースの概念と、単一の Redis インスタンス内のこれらの論理データベース間でキーを転送できる MOVE コマンドについても紹介しました。MSET コマンドを使用して複数のキーを一度に効率的に設定する方法と、MGET コマンドを使用してそれらの値を取得する方法を学びました。最後に、サーバーをブロックせずに大規模なデータベースでキーを反復処理するための強力なツールである SCAN コマンドについて学習しました。検証のためにコマンドがログに記録されるように、各ステップの後に必ず redis-cli を終了することを忘れないでください。