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.
lpush-Schlüsselwert
lpush 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"
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"
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"
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"
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
从列表右侧弹出元素并返回尾部元素
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的元素进行删除,根据count的不同分为三种情况:
count > 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
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
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
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"
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
Abfragebefehllrange key start end
Fügen Sie ein Element von der rechten Seite der Liste ein und geben Sie das Endelement zurückrrreee
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: count > 0, beginnend vom Tabellenende bis zum Tabellenende, Anzahl der Elemente entfernen
count count = 0, alle Werte entfernen, die dem Wert in der Tabelle entsprechenltrim 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 gefunden
brpop-Taste [Taste …] TimeoutEntfernen 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 Demonstration:
Öffnen Sie drei Reids-Verbindungsfenster, das erste führt blpop aus, das zweite führt brpop aus und das dritte führt add aus: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!