這里只是介紹命令使用
列表是用來存儲多個有序的字符串
可以用來充當棧和隊列的角色
列表特點:
-
列表中的元素是有序的,可以通過索引下標來獲取某個元素或者某個范圍的元素
-
獲取和刪除有區別
-
元素可以重復
命令
LPUSH
將一個或者多個元素從左側放入到list中(頭插法)
lpush key element {element ……}
時間復雜度: O(N) N表示插入的元素個數
返回值: 插入新對象之后 list 的長度
LPUSHX
在 key 存在的時候,將一個或者多個元素從左側放入,不存在就會直接返回
lpushx key element {element……}
時間復雜度: O(N) N表示插入的元素個數
返回值: 插入后 list 的長度, key 不存在就是返回 0
RPUSH
將一個或者多個元素從右側進行插入(尾插)
rpush key element {element……}
時間復雜度: O(N) N為插入的元素個數
返回值: 插入后 list 的長度
RPUSHX
在 key 存在時,將一個或者多個元素從右側插入,和 lpushx 類似
rpushx key element {element……}
時間復雜度: O(N) N為插入的元素個數
返回值: 插入后 list 的長度
LRANGE
獲取從 start 到 end 區間的所有元素,左閉右閉
lrange key start end
時間復雜度: O(N)
返回值: 指定區間的元素
LPOP
從 list 左側取出元素(從頭刪除)
lpop key
時間復雜度: O(1)
返回值: 對應取出的元素,如果沒有元素或者key不存在返回 nil
RPOP
從 list 右側取出對應元素(尾刪),其余與 LPOP 相似
rpop key
時間復雜度: O(1)
返回值: 對應取出的元素,如果沒有元素或者key不存在返回 nil
LINDEX
獲取對應下標的元素(從左往右數)
lindex key value
時間復雜度: O(N)
返回值: 下標對應的元素或者 nil
LINSERT
在指定位置插入元素
linsert key {before | after} pivot(要插入的位置) element
時間復雜度: O(N)
返回值: 插入之后list的新長度
LLEN
獲取 list 長度
llen key
時間復雜度: O(1)
返回值: list 的具體長度
阻塞版命令
區別
-
在 list 中有元素的情況下,阻塞版和非阻塞版的結果是一致的
-
如果沒有元素,非阻塞版會直接返回 nil ,阻塞版會根據 timeout 來進行一段時間的阻塞,在此期間 redis 可以執行其他命令,但是對應被阻塞了的客戶端還是會表示為阻塞狀態
-
命令中如果設置了多個鍵,那么會從左向右遍歷,一旦對應上就會彈出元素,并立即返回
-
如果多個客戶端同時對一個鍵執行 pop ,那么只有最先執行的客戶端可以得到彈出的元素
命令
BLPOP
LPOP的阻塞版
blpop key {key……} timeout
時間復雜度: O(1)
返回值: 取出的元素 或者 nil
BRPOP
RPOP的阻塞版
brpop key {key……} timeout
時間復雜度: O(1)
返回值: 取出的元素 或者 nil
命令總結
操作 | 命令 | 時間復雜度 |
添加 | rpush key value [value ...] | O(k),k 是插入的元素個數 |
lpush key value [value ...] | O(k),k 是插入的元素個數 | |
linsert key before|after pivot value | O(n),n 是 pivot 距離頭或尾的偏移量 | |
查找 | lrange key start end | O(s + n),s 是 start 偏移量,n 是范圍長度 |
lindex key index | O(n),n 是索引的偏移量 | |
llen key | O(1) | |
刪除 | lpop key | O(1) |
rpop key | O(1) | |
lrem key count value | O(k),k 是列表元素個數(需遍歷) | |
ltrim key start end | O(k),k 是需保留的元素個數 | |
修改 | lset key index value | O(n),n 是索引的偏移量 |
阻塞版 | blpop key [key ...] timeout | O(1) |
brpop key [key ...] timeout | O(1) |
內部編碼
-
當元素個數比較小同時沒有較大元素時,是 ziplist
-
但是有時會顯示為 quicklist (redis 的默認鏈表實現)
-
當元素個數超過 512 時,是 linkedlist
-
當某個元素長度超過 64 字節時,是 linkedlist