天天看點

php ltrim redis,LTRIM

LTRIM¶

LTRIM key start stop

對一個清單進行修剪(trim),就是說,讓清單隻保留指定區間内的元素,不在指定區間之内的元素都将被删除。

舉個例子,執行指令 LTRIM list 0 2 ,表示隻保留清單 list 的前三個元素,其餘元素全部删除。

下标(index)參數 start 和 stop 都以 0 為底,也就是說,以 0 表示清單的第一個元素,以 1 表示清單的第二個元素,以此類推。

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

當 key 不是清單類型時,傳回一個錯誤。

LTRIM 指令通常和 LPUSH 指令或 RPUSH 指令配合使用,舉個例子:

LPUSH log newest_log

LTRIM log 0 99

這個例子模拟了一個日志程式,每次将最新日志 newest_log 放到 log 清單中,并且隻保留最新的 100 項。注意當這樣使用 LTRIM 指令時,時間複雜度是O(1),因為平均情況下,每次隻有一個元素被移除。

注意LTRIM指令和程式設計語言區間函數的差別

假如你有一個包含一百個元素的清單 list ,對該清單執行 LTRIM list 0 10 ,結果是一個包含11個元素的清單,這表明 stop 下标也在 LTRIM 指令的取值範圍之内(閉區間),這和某些語言的區間函數可能不一緻,比如Ruby的 Range.new 、 Array#slice 和Python的 range() 函數。

超出範圍的下标

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

如果 start 下标比清單的最大下标 end ( LLEN list 減去 1 )還要大,或者 start > stop , LTRIM 傳回一個空清單(因為 LTRIM 已經将整個清單清空)。

如果 stop 下标比 end 下标還要大,Redis将 stop 的值設定為 end 。

可用版本:

>= 1.0.0

時間複雜度:

O(N), N 為被移除的元素的數量。

傳回值:

指令執行成功時,傳回 ok 。

# 一般情況下标

redis> LRANGE alpha 0 -1 # 建立一個 5 元素的清單

1) "h"

2) "e"

3) "l"

4) "l"

5) "o"

redis> LTRIM alpha 1 -1 # 删除索引為 0 的元素

OK

redis> LRANGE alpha 0 -1 # "h" 被删除

1) "e"

2) "l"

3) "l"

4) "o"

# stop 下标比元素的最大下标要大

redis> LTRIM alpha 1 10086

OK

redis> LRANGE alpha 0 -1

1) "l"

2) "l"

3) "o"

# start 和 stop 下标都比最大下标要大,且 start < sotp

redis> LTRIM alpha 10086 200000

OK

redis> LRANGE alpha 0 -1 # 整個清單被清空,等同于 DEL alpha

(empty list or set)

# start > stop

redis> LRANGE alpha 0 -1 # 在建立一個清單

1) "h"

2) "u"

3) "a"

4) "n"

5) "g"

6) "z"

redis> LTRIM alpha 10086 4

OK

redis> LRANGE alpha 0 -1 # 清單同樣被清空

(empty list or set)