1. 程式人生 > >Redis資料型別及常用的操作命令——LIST操作

Redis資料型別及常用的操作命令——LIST操作

可以通過該網站檢視更多redis命令及資訊:http://redisdoc.com/
LPUSH key value [value …]
將一個或多個值 value 插入到列表 key 的表頭
如果有多個 value 值,那麼各個 value 值按從左到右的順序依次插入到表頭: 比如說,對空列表 mylist 執行命令 LPUSH mylist a b c ,列表的值將是 c b a ,這等同於原子性地執行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三個命令。
如果 key 不存在,一個空列表會被建立並執行 LPUSH 操作。
當 key 存在但不是列表型別時,返回一個錯誤。
在Redis 2.4版本以前的 LPUSH 命令,都只接受單個 value 值。
返回值:
執行 LPUSH 命令後,列表的長度。
在這裡插入圖片描述


RPUSH key value [value …]
將一個或多個值 value 插入到列表 key 的表尾(最右邊)。
如果有多個 value 值,那麼各個 value 值按從左到右的順序依次插入到表尾:比如對一個空列表 mylist 執行 RPUSH mylist a b c ,得出的結果列表為 a b c ,等同於執行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。
如果 key 不存在,一個空列表會被建立並執行 RPUSH 操作。
當 key 存在但不是列表型別時,返回一個錯誤。
在 Redis 2.4 版本以前的 RPUSH 命令,都只接受單個 value 值。
返回值:
執行 RPUSH 操作後,表的長度。
在這裡插入圖片描述

LRANGE key start stop
返回列表 key 中指定區間內的元素,區間以偏移量 start 和 stop 指定。
下標(index)引數 start 和 stop 都以 0 為底,也就是說,以 0 表示列表的第一個元素,以 1 表示列表的第二個元素,以此類推。
你也可以使用負數下標,以 -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推。
注意LRANGE命令和程式語言區間函式的區別
假如你有一個包含一百個元素的列表,對該列表執行 LRANGE list 0 10 ,結果是一個包含11個元素的列表,這表明 stop 下標也在 LRANGE命令的取值範圍之內(閉區間),這和某些語言的區間函式可能不一致,比如Ruby的 Range.new 、 Array#slice 和Python的 range() 函式。
超出範圍的下標
超出範圍的下標值不會引起錯誤。
如果 start 下標比列表的最大下標 end ( LLEN list 減去 1 )還要大,那麼 LRANGE 返回一個空列表。
如果 stop 下標比 end 下標還要大,Redis將 stop 的值設定為 end 。
返回值:
一個列表,包含指定區間內的元素。
在這裡插入圖片描述

LLEN key
返回列表 key 的長度。
如果 key 不存在,則 key 被解釋為一個空列表,返回 0 .
如果 key 不是列表型別,返回一個錯誤。
返回值:
列表 key 的長度。
在這裡插入圖片描述
LPOP key
移除並返回列表 key 的頭元素。
返回值:
列表的頭元素。
當 key 不存在時,返回 nil 。
在這裡插入圖片描述
RPOP key
移除並返回列表 key 的尾元素。
返回值:
列表的尾元素。
當 key 不存在時,返回 nil 。
在這裡插入圖片描述
LINDEX key index
返回列表 key 中,下標為 index 的元素。
下標(index)引數 start 和 stop 都以 0 為底,也就是說,以 0 表示列表的第一個元素,以 1 表示列表的第二個元素,以此類推。
你也可以使用負數下標,以 -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推。
如果 key 不是列表型別,返回一個錯誤。
返回值:
列表中下標為 index 的元素。
如果 index 引數的值不在列表的區間範圍內(out of range),返回 nil 。
在這裡插入圖片描述
LREM key count value
根據引數 count 的值,移除列表中與引數 value 相等的元素。
count 的值可以是以下幾種:
• count > 0 : 從表頭開始向表尾搜尋,移除與 value 相等的元素,數量為 count 。
• count < 0 : 從表尾開始向表頭搜尋,移除與 value 相等的元素,數量為 count 的絕對值。
• count = 0 : 移除表中所有與 value 相等的值。
返回值:
被移除元素的數量。
因為不存在的 key 被視作空表(empty list),所以當 key 不存在時, LREM 命令總是返回 0 。
在這裡插入圖片描述
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 。
返回值:
命令執行成功時,返回 ok 。
在這裡插入圖片描述
RPOPLPUSH source destination
命令 RPOPLPUSH 在一個原子時間內,執行以下兩個動作:
• 將列表 source 中的最後一個元素(尾元素)彈出,並返回給客戶端。
• 將 source 彈出的元素插入到列表 destination ,作為 destination 列表的的頭元素。
舉個例子,你有兩個列表 source 和 destination , source 列表有元素 a, b, c , destination 列表有元素 x, y, z ,執行 RPOPLPUSH sourcedestination 之後, source 列表包含元素 a, b , destination 列表包含元素 c, x, y, z ,並且元素 c 會被返回給客戶端。
如果 source 不存在,值 nil 被返回,並且不執行其他動作。
如果 source 和 destination 相同,則列表中的表尾元素被移動到表頭,並返回該元素,可以把這種特殊情況視作列表的旋轉(rotation)操作。
返回值:
被彈出的元素。
在這裡插入圖片描述
LSET key index value
將列表 key 下標為 index 的元素的值設定為 value 。
當 index 引數超出範圍,或對一個空列表( key 不存在)進行 LSET 時,返回一個錯誤。
關於列表下標的更多資訊,請參考 LINDEX 命令。
返回值:
操作成功返回 ok ,否則返回錯誤資訊。
在這裡插入圖片描述