Redis中LIST列表的相關命令


Redis中LIST列表的相關命令

添加

lpush

將一個或多個value插入到key的表頭,如果存在多個value,那么各個value按從左到右的順序依次插入表頭

插入表頭:意味着新插入的值在最前列
如果list之前不存在,則會創建一個新的list,如果list已存在,則追加,返回值是list的元素數量,也可以理解位最后插入的元素的相對位置

127.0.0.1:6379> lpush list2 zhangsan lisi wangwu
(integer) 3
127.0.0.1:6379>

rpush

lpush功能一樣,只不過是從從右往左插入(尾部)
語法:rpush key value1 value2 value3.....

rpush插入時value的順序就是元素在list中的順序

rpushx

在指定list的尾部插入元素,如果該list不存在,則操作無效

127.0.0.1:6379> rpush list4 hello
(integer) 1
127.0.0.1:6379> rpushx list5 hello
(integer) 0

lpushx

rpushx一樣,只不過是從頭部插入

linsert

語法:linsert key before|alter value1 value2
list中的value1元素之前或之后位置插入value2,如果value1不存在list key中,那么不執行任何操作

#在list2中的c元素之前插入一個new元素
127.0.0.1:6379> linsert list2 before c new
(integer) 7
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "b"
3) "new"
4) "c"
5) "d"
6) "e"
7) "f"

修改

ltrim

對一個list進行裁剪,即讓列表值保留指定期間的元素,其余刪除

127.0.0.1:6379> lrange list2 0 -1
1) "chenqi"
2) "zhaoliu"
3) "wangwu"
4) "lisi"
127.0.0.1:6379> ltrim list2 -2 -1
OK
127.0.0.1:6379> lrange list2 0 -1
1) "wangwu"
2) "lisi"
127.0.0.1:6379>

lset

設置指定下標位置元素的值(把原來的值修改了),如果下標不存在則報錯

127.0.0.1:6379> lset list2 2 redis
OK
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "b"
3) "redis"
4) "c"
5) "d"
6) "e"
7) "f"

刪除

rpop

list的尾部彈出一個元素

127.0.0.1:6379> lrange list2 0 -1
1) "chenqi"
2) "zhaoliu"
3) "wangwu"
4) "lisi"
5) "zhangsan"
127.0.0.1:6379> rpop list2
"zhangsan"
127.0.0.1:6379> lrange list2 0 -1
1) "chenqi"
2) "zhaoliu"
3) "wangwu"
4) "lisi"
127.0.0.1:6379>

彈出的意思就是移除

lpop

list的同步彈出一個元素
語法:lpop key

blpop

lpop一樣是彈出語句,不過是阻塞式列表彈出.
同樣依次彈出list中的元素,但是如果list沒有可供彈出的元素,那么這個操作(連接)將等待,直到list中有可供彈出的元素或者連接等待超時直接gg

127.0.0.1:6379> blpop list2 10
1) "list2"
2) "wangwu"
127.0.0.1:6379> blpop list2 10
1) "list2"
2) "lisi"
127.0.0.1:6379> blpop list2 10
(nil)
(10.09s) #超時

注意,這個10代表操作超時時間,該命令返回兩個結果,第一個是操作的listkey名稱.第二個結果是彈出的具體元素

還有brpop,brpoplpush都是對應命令的阻塞版本

查詢

lrange

返回列表key中指定區間之內的元素,區間偏移量startstop指定,下標startstop都是以0開始
注意,偏移量也可以是負數,-1表示列表的最后一個元素,-2表示列表的倒數第二個元素

127.0.0.1:6379> lrange list2 2 4
1) "wangwu"
2) "lisi"
3) "zhangsan"

在偏移量位負數的時候,我們應該把list的順序倒過來看

tip:lrange key 0 -1就是獲取所有元素

start位負數時,它的起點位置從后面開始數,所以說,start確定了值的時候,lrange可以輸出的最大范圍已經決定了,不管stop的值是什么,輸出的元素范圍絕對是start開始往后的元素最大范圍.
所以Redis中的range相關命令其實最重要要看start參數的值,stop只是決定了尾部在哪里

lrange中,stop的值絕對不能在start的前面

lindex

返回list中指定下標的元素,0是開始下標,如果下標位負數,那么順序從后往前,-1是開始位置也是列表中的最后元素

127.0.0.1:6379> lindex list2 -3
"zhaoliu"
127.0.0.1:6379> lindex list2 1
"zhaoliu"

考慮到下標可以負數,所以每個元素是有倆個下標代表位置

llen

返回列表的長度
語法:llen key

如果key不存在,則key被解釋位一個空列表,返回0
那么,如果返回值是0,不一定是list內部元素為空,還有可能key不存在

特殊操作

rpoplpush

語法:rpoplpush key1 key2
key1中的尾部彈出一個元素並插入到key2的頭部

127.0.0.1:6379> rpush list2 a b c d e f g
(integer) 7
127.0.0.1:6379> rpoplpush list2 list3
"g"
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
127.0.0.1:6379> lrange list3 0 -1
1) "g"
127.0.0.1:6379>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM