1、基本概念
(1)list特點
list中數據可以重復,查詢快,增刪慢
(2)存儲結構
(3)應用
對數據量大的集合數據刪減
粉絲列表、評論列表等,利用LRANGE可以很方便地實現分頁的功能
任務隊列(將待執行的任務的相關信息放入到隊列里面)
list通常用來實現一個消息隊列,而且可以確保先后順序,不必像mysql那樣需要通過ORDER BY語句來排序
2、命令
(1)向List存取數據
將一個或多個值插入到列表頭部(從左側添加):
127.0.0.1:6379> lpush list1 a b c d e f (integer) 6 127.0.0.1:6379> lrange list1 0 -1 1) "f" 2) "e" 3) "d" 4) "c" 5) "b" 6) "a"
因為是從左側添加,因此添加后的排列順序如下:
獲取列表指定位置的元素:
127.0.0.1:6379> lrange list1 0 -1 1) "f" 2) "e" 3) "d" 4) "c" 5) "b" 6) "a" 127.0.0.1:6379> lrange list1 1 3 1) "e" 2) "d" 3) "c"
查詢list中的全部元素:0代表起始元素,-1代表最后一個元素
127.0.0.1:6379> lrange list1 0 -1 1) "f" 2) "e" 3) "d" 4) "c" 5) "b" 6) "a"
右側添加元素:
127.0.0.1:6379> lrange list1 0 -1 1) "f" 2) "e" 3) "d" 4) "c" 5) "b" 6) "a" 127.0.0.1:6379> rpush list1 1 2 3 (integer) 9 127.0.0.1:6379> lrange list1 0 -1 1) "f" 2) "e" 3) "d" 4) "c" 5) "b" 6) "a" 7) "1" 8) "2" 9) "3"
根據下標取出數據:
127.0.0.1:6379> lrange list1 0 -1 1) "f" 2) "e" 3) "d" 4) "c" 5) "b" 6) "a" 7) "1" 8) "2" 9) "3" 127.0.0.1:6379> lindex list1 2 "d" 127.0.0.1:6379> lindex list1 -1 "3" 127.0.0.1:6379> lindex list1 -2 "2"
0代表第一個元素,-1代表最后一個元素,-2代表倒數第二個元素
(2)從兩頭彈出元素
彈出后元素消失:
(3)list的長度
(4)blpop命令:彈出並獲取list的第一個元素,需要設置時間,如果沒有元素會一直等待,直到等待超時或發現元素位置,如果有的話直接執行
127.0.0.1:6379> lrange list1 0 -1 1) "e" 2) "d" 3) "c" 4) "b" 5) "a" 6) "1" 7) "2" 8) "3" 127.0.0.1:6379> blpop list1 2000 1) "list1" 2) "e"
127.0.0.1:6379> lrange list1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
5) "1"
6) "2"
7) "3"
(5)刪除若干個值為XXX的元素:
從左邊開始刪除:
上圖為:從左向右數,刪除兩個值為b的元素。
從右邊開始刪除:
從右邊刪除,只需要在數字前面添加負號即可。
(6)替換一個元素
(7)插入
在某一個元素之后插入:
在某一個元素之前插入:
(8)ltrim:保留刪除
127.0.0.1:6379> lrange list1 0 -1 1) "d" 2) "c" 3) "b" 4) "a" 5) "1" 6) "2" 7) "3" 127.0.0.1:6379> ltrim list1 1 3 OK 127.0.0.1:6379> lrange list1 0 -1 1) "c" 2) "b" 3) "a"
(9)rpoplpush:移除列表的最后一個元素,並將該元素添加到另一個列表的左側並返回
127.0.0.1:6379> lrange list1 0 -1 1) "c" 2) "b" 3) "a" 127.0.0.1:6379> lrange list2 0 -1 1) "5" 2) "4" 3) "3" 4) "2" 5) "1" 127.0.0.1:6379> rpoplpush list1 list2 "a" 127.0.0.1:6379> lrange list1 0 -1 1) "c" 2) "b" 127.0.0.1:6379> lrange list2 0 -1 1) "a" 2) "5" 3) "4" 4) "3" 5) "2" 6) "1" 127.0.0.1:6379>
除此之外,還有rpoplpush
循環操作:
127.0.0.1:6379> lrange list2 0 -1 1) "a" 2) "5" 3) "4" 4) "3" 5) "2" 6) "1" 127.0.0.1:6379> rpoplpush list2 list2 "1" 127.0.0.1:6379> lrange list2 0 -1 1) "1" 2) "a" 3) "5" 4) "4" 5) "3" 6) "2" 127.0.0.1:6379> rpoplpush list2 list2 "2" 127.0.0.1:6379> lrange list2 0 -1 1) "2" 2) "1" 3) "a" 4) "5" 5) "4" 6) "3"
(10)彈出列表中的元素,如果列表沒有元素會阻塞列表直到等待超時或發現可彈出的元素位置
127.0.0.1:6379> lrange list1 0 -1 1) "c" 2) "b" 127.0.0.1:6379> lrange list2 0 -1 1) "2" 2) "1" 3) "a" 4) "5" 5) "4" 6) "3" 127.0.0.1:6379> brpoplpush list2 list1 2000 "3" 127.0.0.1:6379> lrange list1 0 -1 1) "3" 2) "c" 3) "b" 127.0.0.1:6379> lrange list2 0 -1 1) "2" 2) "1" 3) "a" 4) "5" 5) "4"