【Redis入門】LPOP・BLPOPコマンドでリストの先頭要素を削除して取得する方法
このチュートリアルでは、Redisデータストア内のキーに保存されたリスト値の先頭(最初)の要素を削除して取得する方法を解説します。そのために、RedisのLPOPコマンドとBLPOPコマンドを使用します。
LPOPコマンドとは
LPOPコマンドは、指定されたキーに格納されているリスト値の先頭要素を削除し、その要素を返します。キーが存在しない場合はnilが返され、キーは存在するものの格納されている値がリスト型でない場合にはエラーが返されます。Redis LPOPコマンドの構文は以下のとおりです。
構文
redis host:post> LPOP <keyname>
戻り値
- (string) リストの先頭要素を表す文字列 - (nil) キーが存在しない場合 - エラー キーは存在するが、格納されている値がリスト型ではない場合
実行例

BLPOPコマンドとは
BLPOPコマンドは、LPOPコマンドのブロッキング版です。指定したいずれのリストからもポップできる要素が存在しない場合に、操作をブロックします。つまり、指定されたすべてのリストが空であるか、すべてのキーが存在しない場合にブロックが発生します。
BLPOPは、指定されたキーを左から右へ順番にチェックし、最初に見つかった空でないリストの先頭要素を削除して返します。例として、BLPOP list1 list2 list3 0というコマンドを実行するケースを考えてみましょう。キーlist1が存在せず(空のリストとして扱われる)、list2が空のリスト、list3には3つの要素が含まれているとします。この場合、list1からlist3へチェックした際に最初の空でないリストはlist3であるため、list3に格納されたリスト値の先頭要素が削除されて返されます。
指定されたキーが存在しない場合、またはキーのリスト値が空の場合、BLPOPは別のクライアントがLPUSH、RPUSH、LINSERTなどのコマンドを実行して、指定されたキーのいずれかに新しい要素を挿入するまで操作をブロックし続けます。新しい要素がいずれかのリスト値に追加されると、クライアントはブロック解除され、キー名とポップされた値を受け取ります。
BLPOPによってクライアントがブロックされている状態で、0以外のタイムアウトが指定されている場合、指定されたタイムアウト時間内に少なくとも1つの指定キーに対する挿入操作が行われなければ、クライアントはnilを返してブロック解除されます。
タイムアウト引数は、ブロックする最大秒数を表す整数値です。タイムアウトに0秒を指定すると、無期限にブロックすることも可能です。
Redis BLPOPコマンドの構文は以下のとおりです。
構文
redis host:post> BLPOP <keyname-1> [ <keyname> ] <timeout>
戻り値
- (array) 2つの要素を持つ配列が返されます。1つ目の要素はポップされた要素のキー名、 2つ目の要素はポップされた要素そのものです。 - (nil) 要素をポップできず、タイムアウトが経過した場合
実行例

参考資料
- LPOPコマンド公式ドキュメント
- BLPOPコマンド公式ドキュメント
以上、Redisデータストアに保存されたリスト値の先頭要素を削除して取得する方法について解説しました。この記事がお役に立てましたら、コメント欄でぜひご意見をお聞かせください。また、他の方にもシェアしていただければ幸いです。
<- List Commands
-
【Redis入門】LPUSH・LPUSHXコマンドでリストの先頭に要素を追加する方法
このチュートリアルでは、Redisデータストア内のキーに保存されたリスト値の先頭に、1つまたは複数の要素を挿入する方法について解説します。そのために使用するのが、Redisの LPUSH コマンドと LPUSHX コマンドです。 LPUSHコマンドとは LPUSHコマンドは、キーに保存されたリスト値の先頭(左端)に、指定した1つ以上の要素を挿入するために使用します。要素は左側のものから順に、リストの先頭へ次々と追加されていきます。たとえば、LPUSH list a b c というコマンドを実行した場合、リストには1番目に c、2番目に b、3番目に a が格納される点に注意してください。 キー
-
Redisリスト入門:リスト型の値を管理するための主要コマンド一覧
Redisリストとは Redisのリスト(List)は、挿入された順番どおりに並べられた文字列のシーケンスです。Redisでは、このリストをキーに対する値として保存することができます。さらに、さまざまなRedisコマンドを組み合わせることで、データベースに格納されたリスト値の保存・管理・取得を柔軟に行えます。 構文 redis host:post> <Command Name> <key name> 実行例 Redisリスト操作の主なコマンド一覧 Redisデータベース内のリスト値を管理するうえで押さえておきたい重要なコマンドを、以下の表にまとめました。