Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

Redisでリストの最後の要素を削除して取得する方法 – RPOP / BRPOPコマンド徹底解説

このチュートリアルでは、Redisデータストアに保存されたリスト型の値から、最後の要素を削除しつつ取り出す(ポップする)方法を学びます。この操作には、RedisのRPOPコマンドとBRPOPコマンドを使用します。

RPOPコマンドとは

RPOPは、指定したキーに格納されているリストの末尾(最後)の要素を削除し、その値を返すコマンドです。

  • キーが存在しない場合は (nil) が返されます。
  • キーは存在するが、格納されている値がリスト型ではない場合はエラーが返されます。

基本構文

redis host:post> RPOP <keyname>

戻り値

- (string) リストの最後の要素を表す文字列
- (nil) キーが存在しない場合
- エラー キーは存在するが、値がリスト型ではない場合

実行例

Redisでリストの最後の要素を削除して取得する方法 – RPOP / BRPOPコマンド徹底解説

BRPOPコマンドとは

BRPOPは、RPOPのブロッキング版にあたるコマンドです。指定したいずれのリストからもポップできる要素がない場合、操作をブロック(待機)します。つまり、指定されたすべてのキーが存在しない、またはすべてのリストが空である場合に待機状態になります。

キーのチェックは左から右へ順番に行われ、最初に見つかった空でないリストの末尾要素を削除して返します。

例えば、BRPOP list1 list2 list3 0 を実行した場合を考えてみましょう。list1 は存在せず(空リストとして扱われる)、list2 は空リスト、list3 には3つの要素があるとします。この場合、list1からlist3へ順にチェックされ、最初の空でないリストである list3 の末尾要素が削除されて返されます。

ブロッキングの仕組み

指定したキーが存在しない、またはリストが空の場合、BRPOPは別のクライアントが LPUSHRPUSHLINSERT などのコマンドでいずれかのキーに新しい要素を挿入するまで操作をブロックし続けます。新しい要素が追加されると、クライアントはブロックが解除され、キー名ポップされた要素を受け取って処理を再開します。

タイムアウトに0以外の値を指定している場合、指定時間内にどのキーにも挿入操作が行われなければ、クライアントはブロック解除され (nil) を返して終了します。

タイムアウト引数について

タイムアウト引数は、最大で何秒間ブロックするかを表す整数値です。0を指定すると無期限にブロックし続けます。

基本構文

redis host:post> BRPOP <keyname-1> [ <keyname> ] <timeout>

戻り値

- (array) 2つの要素を持つ配列。
  第1要素:ポップされた要素が属していたキーの名前
  第2要素:ポップされた要素そのもの
- (nil) 要素をポップできず、タイムアウトが経過した場合

実行例

Redisでリストの最後の要素を削除して取得する方法 – RPOP / BRPOPコマンド徹底解説

参考ドキュメント

  1. RPOP コマンド公式ドキュメント
  2. BRPOP コマンド公式ドキュメント

以上、Redisデータストア内のリストから最後の要素を削除して取得する方法の解説でした。この記事が役に立ったら、ぜひコメント欄で感想を共有したり、他の方にもシェアしてください。

<- リスト系コマンド一覧へ戻る

  1. 【Redis入門】LPUSH・LPUSHXコマンドでリストの先頭に要素を追加する方法

    このチュートリアルでは、Redisデータストア内のキーに保存されたリスト値の先頭に、1つまたは複数の要素を挿入する方法について解説します。そのために使用するのが、Redisの LPUSH コマンドと LPUSHX コマンドです。 LPUSHコマンドとは LPUSHコマンドは、キーに保存されたリスト値の先頭(左端)に、指定した1つ以上の要素を挿入するために使用します。要素は左側のものから順に、リストの先頭へ次々と追加されていきます。たとえば、LPUSH list a b c というコマンドを実行した場合、リストには1番目に c、2番目に b、3番目に a が格納される点に注意してください。 キー

  2. Redisリスト入門:リスト型の値を管理するための主要コマンド一覧

    Redisリストとは Redisのリスト(List)は、挿入された順番どおりに並べられた文字列のシーケンスです。Redisでは、このリストをキーに対する値として保存することができます。さらに、さまざまなRedisコマンドを組み合わせることで、データベースに格納されたリスト値の保存・管理・取得を柔軟に行えます。 構文 redis host:post> <Command Name> <key name> 実行例 Redisリスト操作の主なコマンド一覧 Redisデータベース内のリスト値を管理するうえで押さえておきたい重要なコマンドを、以下の表にまとめました。