1. 程式人生 > 實用技巧 >Redis教程10-列表(List)常用命令使用參考3

Redis教程10-列表(List)常用命令使用參考3

1.LSET

LSET key index value

將列表key下標為index的元素的值設定為value

index引數超出範圍,或對一個空列表(key不存在)進行LSET時,返回一個錯誤。

關於列表下標的更多資訊,請參考LINDEX命令。

可用版本:>= 1.0.0

時間複雜度:

對頭元素或尾元素進行LSET操作,複雜度為 O(1)。 其他情況下,為 O(N),N為列表的長度。 返回值:操作成功返回ok,否則返回錯誤資訊。
127.0.0.1:6379> exists ages
(integer) 0
127.0.0.1:6379> lset ages 0 11    // key不存在
(error) ERR no such key 127.0.0.1:6379> rpush ages 00 11 22 33 (integer) 4 127.0.0.1:6379> lset ages 1 44 // 第二個元素改為44 OK 127.0.0.1:6379> lrange ages 0 -1 // 檢視 1) "00" 2) "44" 3) "22" 4) "33" 127.0.0.1:6379> lset ages 5 66 // index5超過範圍 (error) ERR index out of range

2.LTRIM

LTRIM key start stop

對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除。

舉個例子,執行命令LTRIMlist02,表示只保留列表list的前三個元素,其餘元素全部刪除。

下標(index)引數startstop都以0為底,也就是說,以0表示列表的第一個元素,以1表示列表的第二個元素,以此類推。

你也可以使用負數下標,以-1表示列表的最後一個元素,-2表示列表的倒數第二個元素,以此類推。

key不是列表型別時,返回一個錯誤。

注意LTRIM命令和程式語言區間函式的區別

假如你有一個包含一百個元素的列表list,對該列表執行LTRIMlist010,結果是一個包含11個元素的列表,這表明stop

下標也在LTRIM命令的取值範圍之內(閉區間),這和某些語言的區間函式可能不一致,比如Ruby的Range.newArray#slice和Python的range()函式。

超出範圍的下標

超出範圍的下標值不會引起錯誤。

如果start下標比列表的最大下標end(LLENlist減去1)還要大,或者start>stopLTRIM返回一個空列表(因為LTRIM已經將整個列表清空)。

如果stop下標比end下標還要大,Redis將stop的值設定為end

可用版本:>= 1.0.0

時間複雜度:O(N),N為被移除的元素的數量。

返回值:

命令執行成功時,返回ok
# 情況 1: 常見情況, start 和 stop 都在列表的索引範圍之內

redis> LRANGE alpha 0 -1       # alpha 是一個包含 5 個字串的列表
1) "h"
2) "e"
3) "l"
4) "l"
5) "o"

redis> LTRIM alpha 1 -1        # 刪除 alpha 列表索引為 0 的元素
OK

redis> LRANGE alpha 0 -1       # "h" 被刪除了
1) "e"
2) "l"
3) "l"
4) "o"


# 情況 2: stop 比列表的最大下標還要大


redis> LTRIM alpha 1 10086     # 保留 alpha 列表索引 1 至索引 10086 上的元素
OK

redis> LRANGE alpha 0 -1       # 只有索引 0 上的元素 "e" 被刪除了,其他元素還在
1) "l"
2) "l"
3) "o"


# 情況 3: start 和 stop 都比列表的最大下標要大,並且 start < stop

redis> LTRIM alpha 10086 123321
OK

redis> LRANGE alpha 0 -1        # 列表被清空
(empty list or set)


# 情況 4: start 和 stop 都比列表的最大下標要大,並且 start > stop

redis> RPUSH new-alpha "h" "e" "l" "l" "o"     # 重新建立一個新列表
(integer) 5

redis> LRANGE new-alpha 0 -1
1) "h"
2) "e"
3) "l"
4) "l"
5) "o"

redis> LTRIM new-alpha 123321 10086    # 執行 LTRIM
OK

redis> LRANGE new-alpha 0 -1           # 同樣被清空
(empty list or set)

3.RPOP

RPOP key

移除並返回列表key的尾元素。

可用版本:>= 1.0.0

時間複雜度:O(1)

返回值:

列表的尾元素。 當key不存在時,返回nil。 具體時間用參考 LPOP命令, 除了移除元素方向不同, 其他一致

4.RPUSH

RPUSH key value [value ...]

將一個或多個值value插入到列表key的表尾(最右邊)。

如果有多個value值,那麼各個value值按從左到右的順序依次插入到表尾:比如對一個空列表mylist執行RPUSHmylistabc,得出的結果列表為abc,等同於執行命令RPUSHmylistaRPUSHmylistbRPUSHmylistc

如果key不存在,一個空列表會被建立並執行RPUSH操作。

key存在但不是列表型別時,返回一個錯誤。

在 Redis 2.4 版本以前的 RPUSH 命令,都只接受單個 value 值。

可用版本:>= 1.0.0

時間複雜度:O(1)

返回值:執行RPUSH操作後,表的長度。

RPUSH命令的使用參考命令LPUSH命令, 除了新增元素方向不同, 使用基本一致...

5.RPUSHX

RPUSHX key value

將值value插入到列表key的表尾,當且僅當key存在並且是一個列表。

RPUSH命令相反,當key不存在時,RPUSHX命令什麼也不做。

可用版本:>= 2.2.0

時間複雜度:O(1)

返回值:RPUSHX命令執行之後,表的長度。

RPUSHX命令的使用參考命令LPUSHX命令, 除了新增元素方向不同, 使用基本一致... ...