list は、挿入順にソートされた文字列配列です (平たく言えば、文字列が格納されています)。リストの先頭 (左) または末尾 (右) に要素を追加でき、リストには最大 ^32-1 個の要素 (リストごとに 40 億以上の要素) を含めることができます。
Redis のリストは Java の LinkedList に非常に似ています。最下層はリンクされたリスト構造です。リストの挿入と削除の操作は非常に高速ですが、時間はかかります。 of 0(1). 配列構造の挿入および削除操作とは異なり、データは移動する必要があります。表向きはまだリストですが、Redis でのリストの基本的な実装は単純な二重リンク リストに限定されません。
データの量が少ない場合、その基礎となるストレージ構造は、ジップリスト (圧縮リスト) と呼ばれる連続メモリの一部であり、すべての要素が密接して格納され、連続メモリが割り当てられます。データ量が多い場合はクイックリスト(クイックリンクリスト)構造になります。
しかし、単純なリンク リストにも欠陥があり、リンク リストの前ポインタと次ポインタがより多くのメモリを占有し、スペースが無駄になり、メモリの断片化が増加します。 Redis 3.2 以降、Redis は、ジップリストとリンク リストで構成されるハイブリッド データ構造クイックリスト (クイック リンク リスト) を使用します。
lpush キー値
要素を左から挿入 または複数の値がリストの先頭に挿入されます)
127.0.0.1:6379> lpush ids 1 (integer) 1 127.0.0.1:6379> lrange ids 0 -1 1) "1" 127.0.0.1:6379> lpush ids 2 (integer) 2 127.0.0.1:6379> lrange ids 0 -1 1) "2" 2) "1"
rpush key value
要素を右から挿入します (リストの先頭に 1 つ以上の値を挿入します)リストの末尾 (一番右))
127.0.0.1:6379> rpush ids 3 (integer) 3 127.0.0.1:6379> lrange ids 0 -1 1) "2" 2) "1" 3) "3"
linsert キー BEFORE|AFTER ピボット値
要素の前後に要素を挿入します。返される結果は現在の長さです。リストが存在しないか、指定された要素がリストに存在しない場合、アクションは実行されないことに注意してください。
//元素3前插入0 127.0.0.1:6379> linsert ids before 3 0 (integer) 4 127.0.0.1:6379> lrange ids 0 -1 1) "2" 2) "1" 3) "0" 4) "3" //元素3后插入0 127.0.0.1:6379> linsert ids after 3 4 (integer) 5 127.0.0.1:6379> lrange ids 0 -1 1) "2" 2) "1" 3) "0" 4) "3" 5) "4"
lrange key start end
リスト内の指定された範囲内の要素のリストを取得します (開始値がリストより大きい場合)。終了値の場合、空のリストが返されます
上に示したように
lindex key Index
リスト内の指定されたインデックスにある要素を取得します
127.0.0.1:6379> lindex ids 0 "2" 127.0.0.1:6379> lindex ids -1 "4"
llen key
リストの長さを取得します。リストが存在しない場合は、0を返します。
127.0.0.1:6379> llen ids (integer) 5
lpop key
リストの左側から要素をポップし、先頭要素を返します
127.0.0.1:6379> lpop ids "2" 127.0.0.1:6379> lrange ids 0 -1 1) "1" 2) "0" 3) "3" 4) "4"
rpop key
リストの右側から要素をポップし、先頭要素を返しますtail element
127.0.0.1:6379> rpop ids "4" 127.0.0.1:6379> lrange ids 0 -1 1) "1" 2) "0" 3) "3"
lrem key count value
リストから value に等しい要素を見つけて削除します。カウントに応じて 3 つの状況があります。 0, テーブルの先頭からテーブルの末尾まで、count 要素を削除します;
count count = 0、value に等しいテーブル内のすべての値を削除します
127.0.0.1:6379> lrem ids 0 3 (integer) 1 127.0.0.1:6379> lrange ids 0 -1 1) "1" 2) "0"
ltrim key start end リストをトリミングします。つまり、リストには要素のみが保持されます。指定された範囲内にある要素は削除され、指定された範囲内にない要素は削除されます
127.0.0.1:6379> ltrim ids 0 0 OK 127.0.0.1:6379> lrange ids 0 -1 1) "1"コマンドの変更
lset key Index value要素の値を変更します指定された添え字を値に設定します
127.0.0.1:6379> lset ids 0 0 OK 127.0.0.1:6379> lrange ids 0 -1 1) "0"ブロック ポップアップ コマンドblpop key [key …] timeout
リストの最初の要素を削除して取得します。リストに要素がない場合、待機タイムアウト (秒単位) が経過するか、ポップアップ要素が見つかるまでリストはブロックされます。
最後の要素を削除して取得しますリストの要素がない場合、待機がタイムアウトになるか、ポップアップ要素が見つかるまで、リストはブロックされます。
デモ:
3 つの reids 接続ウィンドウを開き、最初のものが実行されます。 2 番目の blpop brpop を実行し、3 番目の実行を追加します:
実行後、ウィンドウ 1 と 2 がブロックされていることがわかります。これは、ids
# に要素がないためです。
## ウィンドウ 3 は追加を実行します: lpush ids 1 2 3 4 5 6
対応する要素がウィンドウ 1 と 2 にすぐにポップアップ表示されることがわかります:
アプリケーション シナリオ
友達サークルのいいねリスト、コメントリスト、ランキングリスト: lpush コマンドと lrange コマンドは、最新リストの機能を実現できます。毎回、lpush コマンドを通じて新しい要素がリストに挿入されます。その後、lrange コマンドを通じて最新の要素リストが読み取られます。
以上がRedisのリストデータ型に関するコマンドとその使い方の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。