Heim > Datenbank > Redis > Hauptteil

Analyse der Befehle im Zusammenhang mit dem Listendatentyp von Redis und deren Verwendung

WBOY
Freigeben: 2023-05-28 09:32:18
nach vorne
991 Leute haben es durchsucht

    Einführung in die Liste

    • list ist ein String-Array, das in Einfügereihenfolge sortiert ist (für den Laien ausgedrückt speichert es immer noch Strings). Sie können ein Element am Kopf (links) oder am Ende (rechts) einer Liste hinzufügen. Eine Liste kann bis zu ^32-1 Elemente enthalten (mehr als 4 Milliarden Elemente pro Liste).

    • Die Liste in Redis ist der LinkedList in Java sehr ähnlich. Die unterste Ebene ist eine verknüpfte Listenstruktur. Die Einfüge- und Löschvorgänge der Liste sind im Gegensatz zu der sehr schnell Einfüge- und Löschvorgänge der Array-Struktur erforderlich. Obwohl es sich scheinbar immer noch um eine Liste handelt, ist die zugrunde liegende Implementierung von Listen in Redis nicht auf einfache doppelt verknüpfte Listen beschränkt.

    • Wenn die Datenmenge klein ist, ist die zugrunde liegende Speicherstruktur ein kontinuierlicher Speicher, der als Ziplist (komprimierte Liste) bezeichnet wird. Sie speichert alle Elemente eng beieinander und weist einen kontinuierlichen Speicher zu wird zu einer Quicklist-Struktur (Schnellverknüpfte Liste).

    • Aber eine einfache verknüpfte Liste ist auch fehlerhaft. Die Zeiger „vorher“ und „nächst“ der verknüpften Liste belegen mehr Speicher, verschwenden Platz und erhöhen die Speicherfragmentierung. Seit Redis 3.2 verwendet Redis die hybride Datenstruktur Quicklist (Quick Linked List), die aus Ziplist und Linked List besteht.

    Allgemeine Befehle

    Befehl hinzufügen

    lpush-Schlüsselwertlpush key value

    从左边插入元素(将一个或多个值插入到列表头部)

    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"
    Nach dem Login kopieren

    rpush key value

    从右边插入元素(将一个或多个值插入到列表的尾部(最右边))

    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"
    Nach dem Login kopieren

    linsert key BEFORE|AFTER pivot value
    向某个元素前/后插入元素,返回结果为当前列表长度,注意列表不存在或者指定元素不存在列表中时,都将不执行任何操作。

    //元素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"
    Nach dem Login kopieren

    查询命令

    lrange key start end
    获取列表中指定范围内的元素列表;若start值大于列表end值则返回空列表
    如上已经展示过了

    lindex key index
    获取列表指定索引下标的元素

    127.0.0.1:6379> lindex ids 0
    "2"
    127.0.0.1:6379> lindex ids -1
    "4"
    Nach dem Login kopieren

    llen key
    获取列表长度;列表不存在则返回0

    127.0.0.1:6379> llen ids
    (integer) 5
    Nach dem Login kopieren

    弹出/删除命令

    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"
    Nach dem Login kopieren

    rpop key
    从列表右侧弹出元素并返回尾部元素

    127.0.0.1:6379> rpop ids
    "4"
    127.0.0.1:6379> lrange ids 0 -1
    1) "1"
    2) "0"
    3) "3"
    Nach dem Login kopieren

    lrem key count value
    从列表中找到等于value的元素进行删除,根据count的不同分为三种情况:
    count > 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"
    Nach dem Login kopieren

    ltrim key start end
    对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除

    127.0.0.1:6379> ltrim ids 0 0
    OK
    127.0.0.1:6379> lrange ids 0 -1
    1) "1"
    Nach dem Login kopieren

    修改命令

    lset key index value
    Elemente von links einfügen (einen oder mehrere Werte in den Kopf der Liste einfügen)

    127.0.0.1:6379> lset ids 0 0
    OK
    127.0.0.1:6379> lrange ids 0 -1
    1) "0"
    Nach dem Login kopieren

    rpush-Schlüsselwert

    Fügen Sie Elemente von rechts ein (fügen Sie einen oder mehrere Werte am Ende (ganz rechts) der Liste ein)
    rrreee

    linsert-Schlüssel VOR|NACH Pivot-Wert

    Weiterleiten an ein Element / Nach dem Einfügen eines Elements ist das Rückgabeergebnis die aktuelle Listenlänge. Beachten Sie, dass keine Operation ausgeführt wird, wenn die Liste nicht vorhanden ist oder das angegebene Element nicht in der Liste vorhanden ist.
    rrreee
    Abfragebefehl

    lrange key start end

    Ruft die Liste der Elemente innerhalb des angegebenen Bereichs in der Liste ab; wenn der Startwert größer als der Endwert der Liste ist, wird eine leere Liste erstellt zurückgegeben werden. Wie oben gezeigt. Wenn die Liste nicht existiert, geben Sie 0 zurück key

    Fügen Sie ein Element von der rechten Seite der Liste ein und geben Sie das Endelement zurückAnalyse der Befehle im Zusammenhang mit dem Listendatentyp von Redis und deren Verwendungrrreee

    lrem key count value

    Suchen Sie das Element, das dem Wert entspricht, aus der Liste und löschen Sie es wird entsprechend der Anzahl in drei Situationen unterteilt: Analyse der Befehle im Zusammenhang mit dem Listendatentyp von Redis und deren Verwendungcount > 0, beginnend vom Tabellenende bis zum Tabellenende, Anzahl der Elemente entfernen

    count count = 0, alle Werte entfernen, die dem Wert in der Tabelle entsprechen
    rrreeeltrim key start end

    Eine Liste kürzen, also nur die Liste löschen Behalten Sie Elemente innerhalb des angegebenen Bereichs bei, und Elemente, die nicht innerhalb des angegebenen Bereichs liegen, werden gelöscht Wert: Popup-Befehl blockieren oder es wird ein Popup-Element gefundenAnalyse der Befehle im Zusammenhang mit dem Listendatentyp von Redis und deren Verwendung

    brpop-Taste [Taste …] Timeout

    Entfernen und das letzte Element der Liste abrufen. Wenn die Liste keine Elemente enthält, wird die Liste blockiert, bis die Wartezeit abgelaufen ist oder ein Popup-Element gefunden wird Analyse der Befehle im Zusammenhang mit dem Listendatentyp von Redis und deren VerwendungDemonstration:

    Öffnen Sie drei Reids-Verbindungsfenster, das erste führt blpop aus, das zweite führt brpop aus und das dritte führt add aus:

    Sie können sehen, dass Fenster 1 und 2 nach der Ausführung blockiert wurden kein Element

    🎜🎜🎜Fenster 3 führt den Zusatz aus: lpush ids 1 2 3 4 5 6🎜Sie können sehen, dass die entsprechenden Elemente sofort in Fenster 1 und 2 auftauchen: 🎜🎜🎜🎜🎜🎜🎜🎜Anwendung Szenario 🎜🎜Nachrichtenwarteschlange: lpop und rpush (oder umgekehrt lpush und rpop) können die Warteschlangenfunktion realisieren 🎜🎜 Like-Liste, Kommentarliste und Rangliste im Freundeskreis: lpush-Befehl und lrange-Befehl können die Funktion des realisieren Neueste Liste, jedes Mal über den Befehl lpush Fügen Sie neue Elemente in die Liste ein und lesen Sie dann die neueste Elementliste über den Befehl lrange. 🎜

    Das obige ist der detaillierte Inhalt vonAnalyse der Befehle im Zusammenhang mit dem Listendatentyp von Redis und deren Verwendung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Verwandte Etiketten:
    Quelle:yisu.com
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage