一、介紹
類似于數組,順序表,deque
結構圖
特點:元素有序,元素允許重復
由于頭尾高效插入刪除,可以模擬棧,隊列
二、常見 list 命令
1、lpush key elem [elem ...]
頭插元素,返回值列表長度
2、lrange key start end
獲取列表下標 [start, end] 區間的元素
3、lpushx key elem [elem ...]
如果 key 存在再頭插元素
4、rpush key elem [elem ...]
尾插元素
5、rpushx key elem?[elem ...]
如果 key 存在再尾插元素
?6、lpop key [count]
頭刪元素 count 次
7、rpop key [count]
尾刪元素 count 次
8、lindex key index
獲取下標 index 的元素
9、linsert key <before | after> pivot elem
從左往右在列表中找到 pivot 值,在值前 / 后插入元素
10、llen key?
獲取列表長度
11、lrem key count elem
count > 0: 從左往右刪除?count 個 elem
count > 0:?從右往左刪除?count 個 elem
count =?0: 刪除全部元素 elem
12、ltrim key start end
只保留區間 [start, end] 的元素
13、[blpop | brpop] key [key ...] timeout
阻塞 timeout 內刪除元素
如果 list 非空,和 lpop, rpop 一樣
如果 list 為空,不會立即返回,在 timeout 時間內如果列表不為空了那就刪除并返回
阻塞時間內 Redis 可以執行其他命令
在等待多個 key 的列表時,哪個先不為空那就刪除哪個,并且命令返回
多個客戶端同時 pop,哪個先執行哪個就 pop
返回刪除的 key 和刪除的元素
三、內部編碼
總體用的是 quicklist,由 ziplist 和 linkedlist 鏈表組成
把一個個的壓縮列表用鏈表的形式組織起來
結合二者的有點,ziplist 存儲個數少的元素節省空間,linkedlist 存儲個數的元素效率高
四、應用場景
1、消息隊列
生產者消費者模型
2、模擬外鍵
把兩個表中的主鍵提取,結合成列表建立聯系。
如提取課程 id 和學生 id,key 就是一個課程的 id,list 里面存儲所有選課學生的 id,這樣 redis 就能模擬出外鍵的效果