Redis(五):List集合數據類型詳解

Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)

一個列表最多可以包含 232 - 1 個元素 (4294967295, 每個列表超過40億個元素)。

實例:

redis 127.0.0.1:6379> LPUSH runoobkey redis
(integer) 1
redis 127.0.0.1:6379> LPUSH runoobkey mongodb
(integer) 2
redis 127.0.0.1:6379> LPUSH runoobkey mysql
(integer) 3
redis 127.0.0.1:6379> LRANGE runoobkey 0 10

1) "mysql"
2) "mongodb"
3) "redis"

在Redis中我們可以使List成爲,棧、隊列、阻塞隊列!

1、List常用命令

1.1、LPUSH、LRANGE、RPUSH

127.0.0.1:6379> LPUSH list v1	//將一個或者多個的值插入到列表頭部(左)
(integer) 1
127.0.0.1:6379> LPUSH list v2
(integer) 2
127.0.0.1:6379> LPUSH list v3
(integer) 3
127.0.0.1:6379> RPUSH list v4r  //將一個或者多個的值插入到列表尾部(右)
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1  //通過區間獲取list的值
1) "v3"
2) "v2"
3) "v1"
4) "v4r"//可以看出這個順序是:v3 v2 v1 v4r
127.0.0.1:6379> 

1.2、LPOP、RPOP

127.0.0.1:6379> LPOP list	//移除list第一個元素(左)
"v3"
127.0.0.1:6379> rPOP list	//移除list最後一個元素(右)
"v4r"
127.0.0.1:6379> LRANGE list 0 -1
1) "v2"
2) "v1"
127.0.0.1:6379> 

1.3、Lindex

127.0.0.1:6379> LINDEX list 0	//通過下標獲得list的某一個值
"v2"
127.0.0.1:6379> LINDEX list 1
"v1"

1.4、Llen

127.0.0.1:6379> LLEN list	//獲取list長度
(integer) 2

1.5、LREM

127.0.0.1:6379> LRANGE list 0 -1
1) "v4"
2) "v4"
3) "v3"
4) "v2"
5) "v1"
127.0.0.1:6379> LREM list 2 v4	//移除list中指定個數(2)的值(v4)
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379> 

1.6、trim

127.0.0.1:6379> LRANGE list 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
127.0.0.1:6379> LTRIM list 1 2	//將list在指定位置截取
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "v3"
2) "v2"
127.0.0.1:6379> 

1.7、組合命令rpoplpush

127.0.0.1:6379> LRANGE list 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
127.0.0.1:6379> rpoplpush list list2	//移除列表中最後一個元素到新的列表中
"v1"
127.0.0.1:6379> LRANGE list 0 -1
1) "v4"
2) "v3"
3) "v2"
127.0.0.1:6379> LRANGE list2 0 -1
1) "v1"
127.0.0.1:6379> 

1.8、lset

127.0.0.1:6379> EXISTS list2	//查詢列表是否存在
(integer) 1
127.0.0.1:6379> LRANGE list2 0 -1
1) "v1"
127.0.0.1:6379> LSET list2 0 vv	//替換列表指定位置的值,如過不存在會報錯
OK
127.0.0.1:6379> LRANGE list2 0 -1
1) "vv"
127.0.0.1:6379> 

1.9、linset

127.0.0.1:6379> LRANGE list 0 -1
1) "v4"
2) "v3"
3) "v2"
127.0.0.1:6379> LINSERT list before v2 vv	//將某個值插入列表指定值的前面
(integer) 4
127.0.0.1:6379> LINSERT list after v2 vv2	//將某個值插入列表指定值的後面
(integer) 5
127.0.0.1:6379> LRANGE list 0 -1
1) "v4"
2) "v3"
3) "vv"
4) "v2"
5) "vv2"
127.0.0.1:6379> 

2、小結

  • List可以被想象爲一個鏈表,可以befor node after ,left,right進行插入;
  • 如果key不存在,創建新鏈表,如果存在,新增內容;
  • 如果移除了所有值,則代表不存在;
  • 在兩邊插入或改動,效率最高,中間元素效率偏低;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章