【Redis入門】RPOPLPUSH・BRPOPLPUSHコマンドでリスト間に要素を移動する方法
このチュートリアルでは、Redisデータストアにおいて、あるキーに保存されたリストの末尾から要素を取り出して返し、その要素を別のキーに保存されたリストの先頭に挿入する方法を解説します。この操作には、RedisのRPOPLPUSHおよびBRPOPLPUSHコマンドを使用します。
RPOPLPUSHコマンドとは
RPOPLPUSHコマンドは、ソースキーに格納されたリストの末尾(テール)から要素を取り出して返し、その同じ要素を宛先キーに格納されたリストの先頭(ヘッド)に挿入します。
- ソースキーが存在しない場合: nilが返され、何も操作は行われません。
- 宛先キーが存在しない場合: 挿入操作を実行する前に、空のリストとして自動的に作成されます。
- ソースキーと宛先キーが同一の場合: リスト要素のローテーション(回転)と同じ動作になります。
構文
redis host:post> RPOPLPUSH <source-key> <destination-key>
戻り値
- (string):ソースリストから取り出された要素 - (nil):ソースキーが存在しない場合 - エラー:キーは存在するが、格納されている値がリスト型でない場合
使用例

BRPOPLPUSHコマンドとは
BRPOPLPUSHコマンドは、RPOPLPUSHコマンドのブロッキング版です。ソースリストから取り出すべき要素がない場合、つまりソースキーのリストが空であるか、ソースキー自体が存在しない場合に、操作をブロックします。
他のクライアントがLPUSH、RPUSH、LINSERTなどのコマンドでソースリストに要素を挿入すると、ブロックされていたクライアントはブロック解除され、RPOPLPUSH操作を実行できるようになります。
また、0以外のタイムアウトが指定されており、その時間内にソースキーへの挿入操作が行われなかった場合は、null値を返してブロックが解除されます。
- タイムアウト引数: ブロックする最大秒数を表す整数値です。
- タイムアウトに0を指定: 無期限にブロックし続けます。
構文
redis host:post> BRPOPLPUSH <source-key> <destination-key> <timeout>
戻り値
- (string):ソースリストから取り出された要素 - (nil):要素を取り出せないままタイムアウトが経過した場合
使用例

補足:Redis 6.2以降での注意点
RPOPLPUSHおよびBRPOPLPUSHは、Redis 6.2以降では非推奨(deprecated)となっており、より柔軟な操作が可能なLMOVE/BLMOVEコマンドの使用が推奨されています。既存システムとの互換性維持のためこれらのコマンドは引き続き利用できますが、新規開発では後継コマンドの採用を検討しましょう。
参考資料
- RPOPLPUSHコマンド公式ドキュメント
- BRPOPLPUSHコマンド公式ドキュメント
この記事が役に立ったら、ぜひコメント欄で感想を共有したり、他の方にもシェアしてください。
-
Redis SMOVEコマンドの使い方 – セット間で要素を移動する方法
このチュートリアルでは、Redisデータストアに保存されたあるセット(Set)から別のセットへ要素を移動する方法を解説します。これには redis-cli の SMOVE コマンドを使用します。 SMOVEコマンドは、source(送信元)キーに保存されたセットから指定した要素を削除し、その同じ要素をdestination(送信先)キーに保存されたセットへ挿入します。この操作はアトミック(不可分)であるため、どの時点においても、指定された要素は送信元または送信先のいずれか一方のセットにのみ存在することになります。 sourceキーのセットが存在しない場合や、指定した要素がそのセットに含まれてい
-
Google フォトを別のアカウントに移行・転送する方法を徹底解説
Google フォトは、大切な思い出の写真を保存するのに便利なクラウドストレージサービスです。このサービスはGoogle ドライブをバックエンドとして利用しており、無料で最大15GBのストレージ容量を使用できます。多くの方にとって15GBは十分な容量かもしれませんが、それ以上のクラウドストレージを必要とするユーザーも少なくありません。もちろん、Google ドライブで追加容量を購入することもできますし、複数の無料アカウントを作成して、各アカウントで15GBずつ活用するという方法もあります。 また、オンライン上の写真をあるGoogle アカウントから別のアカウントや、他のクラウドサービスへ移した