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 コマンドがリスト 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 が複数のリスト内の要素を待機し、要素がポップされたリストを返すことを示しています。
最後に、exit と入力して Enter キーを押して、両方のターミナルで redis-cli を終了します。これにより、コマンドがログに記録されます。
exit
BLPOP は、非同期通信とタスク処理に依存する、堅牢でスケーラブルなアプリケーションを構築するための重要なコマンドです。これにより、コンシューマーは Redis サーバーを常にポーリングすることなく、新しいデータを効率的に待機できます。