Redis リスト操作

RedisRedisBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験(Lab)では、基本的な Redis リスト操作について学びます。LTRIMLINSERTLPOPRPOPBLPOP などのコマンドを使用して、リストデータを管理および操作する方法を習得します。

具体的には、LTRIM を使用してリストを特定の範囲にトリミングしたり、LINSERT を使用して既存の要素の前または後に要素を挿入したり、LPOP および RPOP を使用してリストの先頭と末尾から要素を削除したり、BLPOP を使用して要素がポップ可能になるまでブロックしたりする練習を行います。これらの操作は、Redis リストに格納されたデータを効率的に管理するために不可欠です。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL redis(("Redis")) -.-> redis/RedisGroup(["Redis"]) redis/RedisGroup -.-> redis/access_cli("Connect Using CLI") redis/RedisGroup -.-> redis/add_left("Push List Left") redis/RedisGroup -.-> redis/add_right("Push List Right") redis/RedisGroup -.-> redis/remove_left("Pop List Left") redis/RedisGroup -.-> redis/remove_right("Pop List Right") subgraph Lab Skills redis/access_cli -.-> lab-552098{{"Redis リスト操作"}} redis/add_left -.-> lab-552098{{"Redis リスト操作"}} redis/add_right -.-> lab-552098{{"Redis リスト操作"}} redis/remove_left -.-> lab-552098{{"Redis リスト操作"}} redis/remove_right -.-> lab-552098{{"Redis リスト操作"}} end

LTRIM でリストをトリミングする

このステップでは、LTRIM コマンドを使用して Redis リストをトリミングする方法を学びます。LTRIM を使用すると、リスト内の要素の範囲を指定し、その範囲外のすべての要素を効果的に削除できます。これは、リストのサイズを管理し、データの特定の部分に焦点を当てる場合に役立ちます。

まず、ターミナルで redis-cli コマンドを使用して Redis サーバーに接続します。

redis-cli

次に、mylist という名前のリストを作成し、いくつかの値を入力します。redis-cli 内で次のコマンドを実行します。

RPUSH mylist "one" "two" "three" "four" "five"

次の出力が表示されます。

(integer) 5

これは、5 つの要素がリストに追加されたことを示します。

次に、LTRIM を使用して、インデックス 1 からインデックス 3 (両端を含む) までの要素のみを保持します。Redis リストのインデックスは 0 から始まることに注意してください。次のコマンドを実行します。

LTRIM mylist 1 3

出力は次のようになります。

OK

これは、LTRIM 操作が成功したことを意味します。

結果を確認するために、LRANGE を使用してリスト全体を取得しましょう。次のコマンドを実行します。

LRANGE mylist 0 -1

次の出力が表示されます。

1) "two"
2) "three"
3) "four"

ご覧のとおり、インデックス 1、2、および 3 の要素 ("two"、"three"、および "four") のみがリストに残っています。"one" と "five" の要素は削除されました。

最後に、exit と入力して Enter キーを押して redis-cli を終了します。これにより、コマンドが確実にログに記録されます。

exit

LTRIM は、Redis リストのサイズとコンテンツを管理するための強力なツールです。目的の範囲を指定することで、不要な要素を効率的に削除し、最も重要なデータに焦点を当てることができます。

LINSERT で要素を挿入する

このステップでは、LINSERT コマンドを使用して Redis リストに要素を挿入する方法を学びます。LINSERT を使用すると、リスト内の既存の要素の前または後に新しい要素を挿入できます。これは、要素の順序を維持し、特定の場所に新しいアイテムを追加する場合に役立ちます。

前のステップから続けて、mylist という名前のリストに、"two"、"three"、"four" の要素が含まれているはずです。

redis-cli コマンドを使用して Redis サーバーに接続します。

redis-cli

次に、リスト内の要素 "two" の前に要素 "one" を挿入します。LINSERTBEFORE オプションを使用します。次のコマンドを実行します。

LINSERT mylist BEFORE "two" "one"

次の出力が表示されます。

(integer) 4

これは、リストに 4 つの要素が含まれるようになったことを示します。

結果を確認するために、LRANGE を使用してリスト全体を取得しましょう。次のコマンドを実行します。

LRANGE mylist 0 -1

次の出力が表示されます。

1) "one"
2) "two"
3) "three"
4) "four"

ご覧のとおり、要素 "one" が "two" の前に挿入されました。

次に、リスト内の要素 "four" の後に要素 "five" を挿入します。LINSERTAFTER オプションを使用します。次のコマンドを実行します。

LINSERT mylist AFTER "four" "five"

出力は次のようになります。

(integer) 5

これは、LINSERT 操作が成功し、リストに 5 つの要素が含まれるようになったことを意味します。

LRANGE を使用して、リスト全体を再度取得しましょう。次のコマンドを実行します。

LRANGE mylist 0 -1

次の出力が表示されます。

1) "one"
2) "two"
3) "three"
4) "four"
5) "five"

ご覧のとおり、要素 "five" が "four" の後に挿入されました。

最後に、exit と入力して Enter キーを押して redis-cli を終了します。これにより、コマンドが確実にログに記録されます。

exit

LINSERT は、Redis リストに新しい要素を追加する場所を正確に制御できるため、データの目的の順序と構造を維持できます。

LPOP と RPOP を使用した要素のポップ

このステップでは、LPOP コマンドと RPOP コマンドを使用して、Redis リストから要素を削除および取得する方法を学びます。LPOP はリストの最初の要素(左端)を削除して返し、RPOP はリストの最後の要素(右端)を削除して返します。これらのコマンドは、Redis リストでキュー(queue)のような、またはスタック(stack)のような動作を実装するのに役立ちます。

前のステップから続けて、mylist という名前のリストに、"one"、"two"、"three"、"four"、"five" の要素が含まれているはずです。

redis-cli コマンドを使用して Redis サーバーに接続します。

redis-cli

次に、LPOP を使用して、リストの最初の要素を削除して取得してみましょう。次のコマンドを実行します。

LPOP mylist

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

"one"

これは、要素 "one" がリストから削除され、返されたことを示しています。

結果を確認するために、LRANGE を使用して残りの要素を取得してみましょう。次のコマンドを実行します。

LRANGE mylist 0 -1

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

1) "two"
2) "three"
3) "four"
4) "five"

ご覧のとおり、要素 "one" はリストに存在しません。

次に、RPOP を使用して、リストの最後の要素を削除して取得してみましょう。次のコマンドを実行します。

RPOP mylist

出力は次のようになります。

"five"

これは、要素 "five" がリストから削除され、返されたことを意味します。

LRANGE を使用して、残りの要素を再度取得してみましょう。次のコマンドを実行します。

LRANGE mylist 0 -1

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

1) "two"
2) "three"
3) "four"

ご覧のとおり、要素 "five" はリストに存在しません。

最後に、mylist リストを削除し、exit と入力して Enter キーを押して redis-cli を終了します。これにより、コマンドが確実にログに記録されます。

DEL mylist
exit

LPOPRPOP は、Redis リストをキューまたはスタックとして管理するための基本的なコマンドです。これらは、リストのいずれかの端から要素を削除および取得するための、シンプルで効率的な方法を提供します。

BLPOP によるブロックとポップ

このステップでは、LPOP のブロッキングバージョンである BLPOP コマンドの使い方を学びます。BLPOP を使用すると、クライアントはリストで要素が利用可能になるまで待機 (ブロック) してから、ポップを試みることができます。これは、コンシューマーが新しいアイテムが追加されるのを待つ必要がある、信頼性の高いメッセージキューまたはタスクキューを構築するのに特に役立ちます。

このステップでは、2 つ のターミナルウィンドウを開く必要があります。両方のターミナルで、redis-cli コマンドを使用して Redis サーバーに接続します。

redis-cli

最初のターミナルを Redis に接続したままにします。2 番目のターミナルで、ブロッキングポップコマンドを実行します。

まず、mylist リストが前のステップで削除されていることを確認してください。そうでない場合は、次のコマンドを実行します。

DEL mylist

2 番目 のターミナルで、次のコマンドを実行します。

BLPOP mylist 100

このコマンドは、最大 100 秒間ブロックし、リスト mylist で要素が利用可能になるのを待ちます。100 秒以内に要素が追加されない場合、コマンドはタイムアウトし、nil を返します。

次に、最初 のターミナルに戻ります。mylist リストに要素を追加しましょう。次のコマンドを実行します。

RPUSH mylist "hello"

最初のターミナルで RPUSH コマンドを実行した直後に、2 番目 のターミナルで BLPOP コマンドが次の出力で返されるはずです。

1) "mylist"
2) "hello"
BLPOP command output

これは、BLPOP コマンドがリスト mylist から要素 "hello" を正常にポップしたことを示しています。返された配列の最初の要素はリストのキーであり、2 番目の要素はポップされた値です。

要素を十分な速さで追加しなかった場合、2 番目のターミナルの BLPOP コマンドがタイムアウトし、nil を返した可能性があります。この場合は、2 番目のターミナルで BLPOP コマンドを再実行し、次に最初のターミナルでリストに要素をすばやく追加してください。

次に、複数のリストで BLPOP を試してみましょう。2 番目 のターミナルで、次のコマンドを実行します。

BLPOP mylist anotherlist 100

このコマンドは、mylist または anotherlist のいずれかで要素が利用可能になるのを待ってブロックします。

最初 のターミナルに戻り、anotherlist に要素を追加します。次のコマンドを実行します。

RPUSH anotherlist "world"

2 番目 のターミナルで BLPOP コマンドが次の出力で返されるはずです。

1) "anotherlist"
2) "world"
BLPOP command output

これは、BLPOP が複数のリスト内の要素を待機し、要素がポップされたリストを返すことを示しています。

最後に、exit と入力して Enter キーを押して、両方のターミナルで redis-cli を終了します。これにより、コマンドがログに記録されます。

exit

BLPOP は、非同期通信とタスク処理に依存する、堅牢でスケーラブルなアプリケーションを構築するための重要なコマンドです。これにより、コンシューマーは Redis サーバーを常にポーリングすることなく、新しいデータを効率的に待機できます。

まとめ

この実験(Lab)では、基本的な Redis リスト操作について学習しました。LTRIMLINSERTLPOPRPOP、および BLPOP などのコマンドを使用して、リストデータを管理および操作する方法を学びました。

LTRIM を使用してリストを特定の範囲にトリミングし、LINSERT を使用して既存の要素の前または後に要素を挿入し、LPOPRPOP を使用してそれぞれリストの先頭と末尾から要素を削除し、BLPOP を使用して要素がポップ可能になるまでブロックする方法を練習しました。これらの操作は、Redis リストに格納されたデータを効率的に管理するために不可欠です。