Redisベース--List操作共通コマンド


目次
LPUSH
RPUSH
LRANGE
LINDEX
LLEN
LINSERT
LSET
LREM
LTRIM
LPUSHX
RPUSHX
LPOP
RPOP
RPOPLPUSH
BLPOP
BRPOP
BRPOPLPUSH
LPUSH
コマンド構文:LPUSH key value 1[value 2...]コマンド用途:リストkeyのヘッダーに1つ以上の値valueを左から右の順に挿入します.時間複雑度:O(1)
127.0.0.1:6379> exists books
(integer) 0
127.0.0.1:6379> lpush books "Mastering Redis" "Thinking In Java" //       
(integer) 2
127.0.0.1:6379> lrange books 0 -1
1) "Thinking In Java"
2) "Mastering Redis"
127.0.0.1:6379> lpush books  "MongonDB Basic" "MongonDB Basic" //         
(integer) 4
127.0.0.1:6379> lrange books 0 -1
1) "MongonDB Basic"
2) "MongonDB Basic"
3) "Thinking In Java"
4) "Mastering Redis"

RPUSH
コマンド構文:RPUSH key value 1[value 2...]コマンドの用途:リストkeyのテーブルの末尾に1つ以上の値valueを左から右の順に挿入します.時間複雑度:O(1)
127.0.0.1:6379> exists books
(integer) 0
127.0.0.1:6379> rpush books "Mastering Redis" "Thinking In Java" //       
(integer) 2
127.0.0.1:6379> lrange books 0 -1
1) "Mastering Redis"
2) "Thinking In Java"
127.0.0.1:6379> rpush books "MongoDB Basic"  "MongoDB Basic" //         
(integer) 4
127.0.0.1:6379> lrange books 0 -1
1) "Mastering Redis"
2) "Thinking In Java"
3) "MongoDB Basic"
4) "MongoDB Basic"

LRANGE
コマンド構文:LRANGE key start stopコマンドの使用:リストkeyにstartとstopの間に下付きの要素を返します.時間複雑度:O(S+N)、Sはオフセット量start、Nは指定区間内の要素の数です. 
127.0.0.1:6379> exists books
(integer) 0
127.0.0.1:6379> lpush books "Redis" "Java" "PHP" "MongonDB"
(integer) 4
127.0.0.1:6379> lrange books 0 -1 // 0       ,-1        
1) "MongonDB"
2) "PHP"
3) "Java"
4) "Redis"
127.0.0.1:6379> lrange books 1 -2
1) "PHP"
2) "Java"

LINDEX
コマンド構文:LINDEX key indexコマンドの用途:リストkeyに戻り、indexと表示される要素を返します.時間複雑度:O(N),Nは下付きindexに到達する過程で経過する元素の数である. 
127.0.0.1:6379> exists books
(integer) 0
127.0.0.1:6379> lpush books "Redis" "Java" "PHP" "MongonDB"
(integer) 4
127.0.0.1:6379> lrange books 0 -1
1) "MongonDB"
2) "PHP"
3) "Java"
4) "Redis"
127.0.0.1:6379> lindex books 2
"Java"

LLEN
コマンド構文:LLEN keyコマンド用途:リストkeyの長さを返します.時間複雑度:O(1)
127.0.0.1:6379> exists books
(integer) 0
127.0.0.1:6379> llen books
(integer) 0
127.0.0.1:6379> lpush books "Redis" "Java" "PHP" "MongonDB"
(integer) 4
127.0.0.1:6379> llen books
(integer) 4

LINSERT
コマンド構文:LINSERT key BEFORE|AFTER pivot valueコマンド用途:リストkeyの値pivotの前または後に値valueを挿入します.時間複雑度:O(N),Nはpivotを探す過程で通過する元素の数である. 
127.0.0.1:6379> exists books
(integer) 0
127.0.0.1:6379> lpush books "Redis" "Java" "PHP" "MongonDB"
(integer) 4
127.0.0.1:6379> lrange books 0 -1
1) "MongonDB"
2) "PHP"
3) "Java"
4) "Redis"
127.0.0.1:6379> linsert books before "PHP" "Visual Basic"
(integer) 5
127.0.0.1:6379> lrange books 0 -1
1) "MongonDB"
2) "Visual Basic"
3) "PHP"
4) "Java"
5) "Redis"
127.0.0.1:6379> linsert books after "Java" "Python"
(integer) 6
127.0.0.1:6379> lrange books 0 -1
1) "MongonDB"
2) "Visual Basic"
3) "PHP"
4) "Java"
5) "Python"
6) "Redis"

LSET
コマンド構文:LSET key index valueコマンド用途:リストkeyの下にindexと表示される要素の値をvalueに設定します.時間複雑度:ヘッダーと末尾を操作する場合、複雑度はO(1)、残りの場合、複雑度はO(N)、Nはリストの長さである. 
127.0.0.1:6379> exists books
(integer) 0
127.0.0.1:6379> lset books 0 "Java" //     (key    )   LSET,      
(error) ERR no such key
127.0.0.1:6379> lpush books "Redis" "Java" "PHP" "MongonDB"
(integer) 4
127.0.0.1:6379> lrange books 0 -1
1) "MongonDB"
2) "PHP"
3) "Java"
4) "Redis"
127.0.0.1:6379> lset books 1 "C++" 
OK
127.0.0.1:6379> lrange books 0 -1
1) "MongonDB"
2) "C++"
3) "Java"
4) "Redis"
127.0.0.1:6379> lset books 4 "Visual Basic" // index     ,      
(error) ERR index out of range

LREM
コマンド構文:LREM key count valueコマンド用途:リストkeyからcount個のパラメータvalueに等しい要素を削除します.コマンドパラメータ:
count>0:ヘッダーから末尾への検索を開始し、count個のvalueに等しい要素を除去します. 
count<0:テーブルの最後からヘッダへの検索を開始し、count個のvalueに等しい要素を削除します. 
count=0:テーブル内のvalueに等しいすべての値を削除します. 
時間複雑度:O(N),Nはリストの長さである.  
127.0.0.1:6379> lpush books "Java" "Java" "PHP" "Java" "Redis" "Java" "Redis"
(integer) 7
127.0.0.1:6379> lrange books 0 -1
1) "Redis"
2) "Java"
3) "Redis"
4) "Java"
5) "PHP"
6) "Java"
7) "Java"
127.0.0.1:6379> lrem books 2 "Java" //         ,        Java
(integer) 2
127.0.0.1:6379> lrange books 0 -1
1) "Redis"
2) "Redis"
3) "PHP"
4) "Java"
5) "Java"
127.0.0.1:6379> lrem books -2 "Java" //         ,        Java
(integer) 2
127.0.0.1:6379> lrange books 0 -1
1) "Redis"
2) "Redis"
3) "PHP"
127.0.0.1:6379> lrem books 0 "Redis" //         Redis
(integer) 2
127.0.0.1:6379> lrange books 0 -1
1) "PHP"

LTRIM
コマンド構文:LTRIM key start stopコマンド用途:リストkeyを作成し、startとstopの間にラベルが付いている要素の時間的複雑さ:O(N)、Nが除去された要素の数だけを保持します. 
127.0.0.1:6379> exists books
(integer) 0
127.0.0.1:6379> lpush books "Redis" "C++" "PHP" "Python"
(integer) 4
127.0.0.1:6379> lrange books 0 -1
1) "Python"
2) "PHP"
3) "C++"
4) "Redis"
127.0.0.1:6379> ltrim books 1 2
OK
127.0.0.1:6379> lrange books 0 -1
1) "PHP"
2) "C++"

LPUSHX
コマンド構文:LPUSHX key valueコマンドの使用:keyが存在し、リストである場合にのみ、値valueをリストkeyのヘッダーに挿入します.時間複雑度:O(1)
127.0.0.1:6379> exists books
(integer) 0
127.0.0.1:6379> lpush books "Redis" "PHP"
(integer) 2
127.0.0.1:6379> lrange books 0 -1
1) "PHP"
2) "Redis"
127.0.0.1:6379> lpushx books "C++"
(integer) 3
127.0.0.1:6379> lrange books 0 -1
1) "C++"
2) "PHP"
3) "Redis"

RPUSHX
コマンド構文:RPUSHX key valueコマンドの使用:keyが存在し、リストである場合にのみ、値valueをリストkeyのテーブルの末尾に挿入します.時間複雑度:O(1)
127.0.0.1:6379> exists books
(integer) 0
127.0.0.1:6379> lpush books "Redis" "PHP"
(integer) 2
127.0.0.1:6379> lrange books 0 -1
1) "PHP"
2) "Redis"
127.0.0.1:6379> rpushx books "C++"
(integer) 3
127.0.0.1:6379> lrange books 0 -1
1) "PHP"
2) "Redis"
3) "C++"

LPOP
コマンド構文:LPOP keyコマンドの使用:リストkeyのヘッダ要素を削除して返します.時間複雑度:O(1)
127.0.0.1:6379> lrange books 0 -1
1) "PHP"
2) "Redis"
3) "C++"
127.0.0.1:6379> lpop books
"PHP"
127.0.0.1:6379> lrange books 0 -1
1) "Redis"
2) "C++"

RPOP
コマンド構文:RPOP keyコマンドの使用:リストkeyの末尾要素を削除して返します.時間複雑度:O(1)
127.0.0.1:6379> lrange books 0 -1
1) "PHP"
2) "Redis"
3) "C++"
127.0.0.1:6379> rpop books
"C++"
127.0.0.1:6379> lrange books 0 -1
1) "PHP"
2) "Redis"

RPOPLPUSH
コマンド構文:RPOPLPUSH source destinationコマンド用途:リストsourceの末尾要素を削除して返し、destinationリストのヘッダーに追加します.時間複雑度:O(1)
127.0.0.1:6379> exists source destination
(integer) 0
127.0.0.1:6379> lpush source "Hello" "2017" "Happy New Year"
(integer) 3
127.0.0.1:6379> lpush destination "World"
(integer) 1
127.0.0.1:6379> lrange source 0 -1
1) "Happy New Year"
2) "2017"
3) "Hello"
127.0.0.1:6379> lrange destination  0 -1
1) "World"
127.0.0.1:6379> rpoplpush source destination
"Hello"
127.0.0.1:6379> lrange source 0 -1
1) "Happy New Year"
2) "2017"
127.0.0.1:6379> lrange destination  0 -1
1) "Hello"
2) "World"

BLPOP
コマンド構文:BLPOP key 1[key 2...]timeoutコマンドの用途:LPOPコマンドのブロックバージョンで、特定のリストにポップアップ可能な要素がない場合、接続はタイムアウト待ちまたはポップアップ可能な要素が発見されるまでBLPOPコマンドにブロックされます.複数のkeyパラメータが与えられた場合、パラメータkeyの前後順に各リストを順次チェックし、最初の空でないリストのヘッダ要素をポップアップします.コマンドシーン:
非ブロック動作:BLPOPが呼び出されると、所与のkey内に少なくとも1つの非空リストがある場合、遭遇した最初の非空リストのヘッダ要素がポップアップされ、ポップアップされた要素が属するリストの名前とともに、構成結果が呼び出し元に返される. 
≪ブロック動作|Blocking Behavior|emdw≫:指定したキーがすべて存在しないか、空のリストが含まれている場合、BLPOPコマンドは、タイムアウトを待つまで接続をブロックします.または、指定したキーのいずれかに対してLPUSHコマンドまたはRPUSHコマンドを実行する別のクライアントがあります.タイムアウトパラメータtimeoutは、秒単位の数値を値として受け入れます.タイムアウトパラメータを0に設定すると、ブロック時間が無期限に延長できることを示します.同じkeyは複数のクライアントによって同時にブロックされる.異なるクライアントは1つのキューに入れられ、keyに対して「先ブロック先サービス」(first-BLPOP,first-served)の順にBLPOPコマンドを実行する. 
時間複雑度:O(1)
BRPOP
コマンド構文:BRPOP key 1[key 2...]timeoutコマンドの用途:RPOPコマンドのブロックバージョンで、特定のリスト内にポップアップ可能な要素がない場合、接続はBRPOPコマンドによってブロックされ、タイムアウトを待つか、ポップアップ可能な要素が発見されるまでブロックされます.複数のkeyパラメータが与えられた場合、パラメータkeyの前後順に各リストを順次チェックし、最初の空でないリストの末尾要素をポップアップします.コマンドシーン:BLPOPコマンドを参照します.時間複雑度:O(1)
BRPOPLPUSH
コマンド構文:BRPOLPUSH source destination timeoutコマンド用途:RPOPLPUSHのブロックバージョン、所与のリストsourceが空でない場合、BRPOLPUSHの表現はRPOPLPUSHと同じである.リストsourceが空の場合、BRPOLPUSHコマンドは、タイムアウト待ち、または別のクライアントがsourceに対してLPUSHコマンドまたはRPUSHコマンドを実行するまで接続をブロックします.タイムアウトパラメータtimeoutは、秒単位の数値を値として受け入れます.タイムアウトパラメータを0に設定すると、ブロック時間が無期限に延長できることを示します.時間複雑度:O(1)
コマンドモード:
セキュアなキュー
Redisのリストは、メッセージを異なるプログラム間で秩序正しく交換するためのキューとしてよく使用される.一方のクライアントはLPUSHコマンドによってメッセージをキューに入れ、他方のクライアントはRPOPまたはBRPOPコマンドによって待ち時間が最も長いメッセージを取り出します.
残念なことに、上記のキューメソッドは「安全ではありません」です.このプロセスでは、クライアントがメッセージを取り出した後にクラッシュし、処理されていないメッセージも失われる可能性があります.
RPOPLPUSHコマンド(またはそのブロックバージョンBRPOLPUSH)を使用すると、メッセージを返すだけでなく、別のバックアップリストにこのメッセージを追加します.正常であれば、クライアントがメッセージの処理を完了した後、LREMコマンドでバックアップテーブルから削除できます.
最後に、バックアップ・テーブルを監視するためのクライアントを追加することもできます.これにより、一定の処理時間を超えたメッセージをキューに自動的に再配置します(メッセージを処理するクライアントがクラッシュした可能性があります).これにより、メッセージが失われません.
ループリスト
同じkeyをRPOPLPUSHコマンドの2つのパラメータとして使用することにより、クライアントは、LRANGEコマンドのようにすべてのリスト要素をサーバからクライアントに一気に送信することなく、リスト要素を次々と取得することができます(両方の方法の総複雑度はO(N)).