Redis教程10-列表(List)常用命令使用參考2
1.LPOP
LPOP key
移除並返回列表key的頭元素。
可用版本:>= 1.0.0
時間複雜度:O(1)
返回值:
列表的頭元素。 當key不存在時,返回nil。127.0.0.1:6379> flushdb OK 127.0.0.1:6379> rpush ages 00 11 22 33 44 55 66 // 建立列表 (integer) 7 127.0.0.1:6379> lpop ages // 移除頭第一個元素 "00" 127.0.0.1:6379> lpop ages // 繼續移除頭第一個元素 "11" 127.0.0.1:6379> lpop names //key不存在, 返回nil (nil) 127.0.0.1:6379> set name redis666 OK 127.0.0.1:6379> lpop name // key型別不匹配, 報錯 (error) WRONGTYPE Operation against a key holding the wrong kind of value
2.LPUSH
LPUSH key value [value ...]
將一個或多個值value插入到列表key的表頭
如果有多個value值,那麼各個value值按從左到右的順序依次插入到表頭: 比如說,對空列表mylist執行命令LPUSHmylistabc
如果key不存在,一個空列表會被建立並執行LPUSH操作。
當key存在但不是列表型別時,返回一個錯誤。
在Redis 2.4版本以前的 LPUSH 命令,都只接受單個 value 值。
可用版本:>= 1.0.0
時間複雜度:O(1)
返回值:執行LPUSH命令後,列表的長度。
127.0.0.1:6379> exists ages (integer) 0 127.0.0.1:6379> lpush ages 00 11 // 新增多個元素 (integer) 2127.0.0.1:6379> lrange ages 0 -1 1) "11" 2) "00" 127.0.0.1:6379> lpush ages 22 // 新增單個元素 (integer) 3 127.0.0.1:6379> lpush ages 22 // 新增重複元素, 列表允許重複元素 (integer) 4 127.0.0.1:6379> lrange ages 0 -1 1) "22" 2) "22" 3) "11" 4) "00"
3.LPUSHX
LPUSHX key value
將值value插入到列表key的表頭,當且僅當key存在並且是一個列表。
和LPUSH命令相反,當key不存在時,LPUSHX命令什麼也不做。
可用版本:>= 2.2.0
時間複雜度:O(1)
返回值:LPUSHX命令執行之後,表的長度。
127.0.0.1:6379> exists ages (integer) 0 127.0.0.1:6379> lpushx ages 00 // key不存在, 不進行操作 (integer) 0 127.0.0.1:6379> exists ages (integer) 0 127.0.0.1:6379> lpush ages 00 // 建立列表ages (integer) 1 127.0.0.1:6379> lrange ages 0 -1 1) "00" 127.0.0.1:6379> lpushx ages 11 // 這次lpushx操作成功 (integer) 2 127.0.0.1:6379> lrange ages 0 -1 1) "11" 2) "00"
4.LRANGE
LRANGE key start stop
返回列表key中指定區間內的元素,區間以偏移量start和stop指定。
下標(index)引數start和stop都以0為底,也就是說,以0表示列表的第一個元素,以1表示列表的第二個元素,以此類推。
你也可以使用負數下標,以-1表示列表的最後一個元素,-2表示列表的倒數第二個元素,以此類推。
注意LRANGE命令和程式語言區間函式的區別
假如你有一個包含一百個元素的列表,對該列表執行LRANGElist010,結果是一個包含11個元素的列表,這表明stop下標也在LRANGE命令的取值範圍之內(閉區間),這和某些語言的區間函式可能不一致,比如Ruby的Range.new、Array#slice和Python的range()函式。
超出範圍的下標
超出範圍的下標值不會引起錯誤。
如果start下標比列表的最大下標end(LLENlist減去1)還要大,那麼LRANGE返回一個空列表。
如果stop下標比end下標還要大,Redis將stop的值設定為end。
可用版本:>= 1.0.0
時間複雜度:O(S+N),S為偏移量start,N為指定區間內元素的數量。
返回值:一個列表,包含指定區間內的元素。
127.0.0.1:6379> rpush ages 00 11 22 33 44 55 66 (integer) 7 127.0.0.1:6379> lrange ages 0 -1 // 第一個元素到最後一個元素 1) "00" 2) "11" 3) "22" 4) "33" 5) "44" 6) "55" 7) "66" 127.0.0.1:6379> lrange ages 0 2 // 第一個元素到第三個元素 1) "00" 2) "11" 3) "22" 127.0.0.1:6379> lrange ages 0 10 // stop超過最大範圍, 忽略超過部分 1) "00" 2) "11" 3) "22" 4) "33" 5) "44" 6) "55" 7) "66" 127.0.0.1:6379> lrange ages 7 10 // start和end都不在範圍內 (empty list or set) 127.0.0.1:6379> lrange ages 0 0 1) "00" 127.0.0.1:6379>
5.LREM
LREM key count value
根據引數count的值,移除列表中與引數value相等的元素。
count的值可以是以下幾種:
- count>0: 從表頭開始向表尾搜尋,移除與value相等的元素,數量為count。
- count<0: 從表尾開始向表頭搜尋,移除與value相等的元素,數量為count的絕對值。
- count=0: 移除表中所有與value相等的值。
可用版本:>= 1.0.0
時間複雜度:O(N),N為列表的長度。
返回值:
被移除元素的數量。 因為不存在的key被視作空表(empty list),所以當key不存在時,LREM命令總是返回0。127.0.0.1:6379> flushdb OK 127.0.0.1:6379> 127.0.0.1:6379> rpush words aaa bbb ccc aaa bbb ccc aaa bbb ccc // 建立列表 (integer) 9 127.0.0.1:6379> lrange words 0 -1 1) "aaa" 2) "bbb" 3) "ccc" 4) "aaa" 5) "bbb" 6) "ccc" 7) "aaa" 8) "bbb" 9) "ccc" 127.0.0.1:6379> lrem words 2 aaa // 移除從表頭到表尾,最先發現的兩個 aaa (integer) 2 127.0.0.1:6379> lrange words 0 -1 // 前兩個aaa被刪除了 1) "bbb" 2) "ccc" 3) "bbb" 4) "ccc" 5) "aaa" 6) "bbb" 7) "ccc" 127.0.0.1:6379> lrem words -2 bbb // 移除從表尾到表頭,最先發現的兩個bbb (integer) 2 127.0.0.1:6379> lrange words 0 -1 1) "bbb" 2) "ccc" 3) "ccc" 4) "aaa" 5) "ccc" 127.0.0.1:6379> lrem words 0 ccc // 移除表中所有 ccc (integer) 3 127.0.0.1:6379> lrange words 0 -1 1) "bbb" 2) "aaa"