Redisのリストデータ型に関するコマンドとその使い方の分析

WBOY
リリース: 2023-05-28 09:32:18
転載
962 人が閲覧しました

    #リストの概要

    • 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
    ログイン後にコピー

    Pop/delete コマンド

    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 < 0, テーブルの末尾から先頭まで、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

    リストの最初の要素を削除して取得します。リストに要素がない場合、待機タイムアウト (秒単位) が経過するか、ポップアップ要素が見つかるまでリストはブロックされます。

    brpop key [key …] timeout

    最後の要素を削除して取得しますリストの要素がない場合、待機がタイムアウトになるか、ポップアップ要素が見つかるまで、リストはブロックされます。
    デモ:
    3 つの reids 接続ウィンドウを開き、最初のものが実行されます。 2 番目の blpop brpop を実行し、3 番目の実行を追加します:
    実行後、ウィンドウ 1 と 2 がブロックされていることがわかります。これは、ids

    # に要素がないためです。 Redisのリストデータ型に関するコマンドとその使い方の分析

    Redisのリストデータ型に関するコマンドとその使い方の分析## ウィンドウ 3 は追加を実行します: lpush ids 1 2 3 4 5 6

    対応する要素がウィンドウ 1 と 2 にすぐにポップアップ表示されることがわかります:


    Redisのリストデータ型に関するコマンドとその使い方の分析

    Redisのリストデータ型に関するコマンドとその使い方の分析アプリケーション シナリオ

    メッセージ キュー: lpop と rpush (または逆に lpush と rpop) でキューの機能を実現できます。

    友達サークルのいいねリスト、コメントリスト、ランキングリスト: lpush コマンドと lrange コマンドは、最新リストの機能を実現できます。毎回、lpush コマンドを通じて新しい要素がリストに挿入されます。その後、lrange コマンドを通じて最新の要素リストが読み取られます。

    以上がRedisのリストデータ型に関するコマンドとその使い方の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    関連ラベル:
    ソース:yisu.com
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!