概括
redis列表是一種有序的線性結構,它之中的數據可以重複。正是因爲它是有序的,所以它能作爲一些常用的數據結構,如隊列、棧等。也能進行一些相應的操作,比如遍歷、索引取值等。
操作命令
推入、取出操作:LPUSH、RPUSH、LPOP、RPOP
LPUSH、RPUSH、LPOP、RPOP這四個命令分別對應於左邊推入、右邊推入、左邊彈出、右邊彈出這四個操作,其中推入操作可一次推入多個值,如果按照從左向右來看推入的數據的話,那麼LPUSH最先推入的在最右邊、RPUSH最先推入的在最左邊,即RPUSH操作看起來跟從左向右的方向一致。另外還有LPUSHX、RPUSHX操作,這兩個操作是隻有列表本身存在的條件下才會起反應,並且它們一次只能推入一個元素。
彈出操作,操作一次只能彈出列表最邊上的一個元素,LPOP彈出左邊的元素,RPOP彈出最右邊的元素。另外還有BRPOP這個命令,它後跟一個或多個空值列表,其用來可以阻塞客戶端的彈出操作,直到有另一個客戶端向對應的某個列表中推入一個數據時,這個客戶端纔會變爲非阻塞狀態。BLPOP命令類似。
這裏還有一個命令 RPOPLPUSH命令,它指從源列表最右端彈出一個元素,並推入到目標列表的最左邊,源列表和目標列表可以是同一個列表。
BRPOPLPUSH命令即是阻塞式的RPOPLPUSH命令。
命令彙總:
LPUSH list item [item item ...]
RPUSH list item [item item ...]
LPUSHX list item
RPUSHX list item
LPOP list
RPOP list
RPOPLPUSH sourcelist targetlist
BLPOP list [list ...] timeout
BRPOP list [list ...] timeout
BRPOPLPUSH source_list target_list timeout
LSET命令
LSET list index new_element
這個命令即給對應的索引位置設置新的值,若給的索引超出列表原本範圍,則返回錯誤。
LINSERT
LINSERT list BEFORE|AFTER target_element new_element
這個命令在列表中元素的前面或者後面插入新元素(因爲列表中數據有重複,所以它只在最先找到的元素位置插入)。
LRANGE
LRANGE list start end
獲取對應索引範圍內的元素。注意這裏的範圍是閉區間。索引也可以爲負值,比如最後一個元素的索引爲-1,一般獲取列表中所有元素的操作命令是: LRANGE list 0 -1。
LLEN
LLEN list
獲取列表的長度。
LINDEX
LINDEX list index
獲取指定索引上的元素。
LTRIM
LTRIM list start end
對列表進行裁剪。只保留指定閉區間範圍內的元素。
LREM
LREM list count element
從列表中移除對應的某個元素,因爲元素是重複的,可以有多個,所以可以指定移除的個數。若指定個數爲0,則默認移除列表中所有的這個元素, 若個數爲負數,則從列表右端開始向左端檢查,並移除最先發現的負數的絕對值個元素。