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 サーバーを常にポーリングすることなく、新しいデータを効率的に待機できます。