常用來製作隊列,當然lpush+rpop也能做棧 #將RPUSH RPUSHX LPUSH LPUSHX一併介紹(具體介紹RPUSH和RPUSHX,因為其實就是插入的方向的區別) RPUSH key value [value ...] 向存於 key 的列表的尾部插入所有指定的值。如果 key 不存 ...
常用來製作隊列,當然lpush+rpop也能做棧
#將RPUSH RPUSHX LPUSH LPUSHX一併介紹(具體介紹RPUSH和RPUSHX,因為其實就是插入的方向的區別)
RPUSH key value [value ...]
向存於 key 的列表的尾部插入所有指定的值。如果 key 不存在,那麼會創建一個空的列表然後再進行 push 操作。 當 key 保存的不是一個列表,那麼會返回一個錯誤。
可以使用一個命令把多個元素打入隊列,只需要在命令後面指定多個參數。元素是從左到右一個接一個從列表尾部插入。 比如命令 RPUSH mylist a b c 會返回一個列表,其第一個元素是 a ,第二個元素是 b ,第三個元素是 c
#情況1 key不是列表 127.0.0.1:6379> set list2 test OK 127.0.0.1:6379> RPUSH list2 1 2 3 (error) WRONGTYPE Operation against a key holding the wrong kind of value #情況2 正常情況 127.0.0.1:6379> RPUSH list1 1 2 3 (integer) 3 127.0.0.1:6379> LRANGE list1 0 -1 1) "1" 2) "2" 3) "3"
RPUSHX key value
將值 value 插入到列表 key 的表尾, 當且僅當 key 存在並且是一個列表。 和 RPUSH 命令相反, 當 key 不存在時,RPUSHX 命令什麼也不做。
#情況1 正常情況list存在以剛剛的list1舉例 127.0.0.1:6379> RPUSHX list1 4 (integer) 4 127.0.0.1:6379> LRANGE list1 0 -1 1) "1" 2) "2" 3) "3" 4) "4" #情況2 list不存在,不操作直接返回0 127.0.0.1:6379> RPUSHX list3 4 (integer) 0
#pop指令。將RPOP LPOP一併介紹(具體介紹RPOP,因為其實就是彈出的方向的區別)
RPOP key
移除並返回存於 key 的 list 的最後一個元素。
#情況1list不存在的情況 127.0.0.1:6379> RPOP list3 (nil) #情況2 非list 127.0.0.1:6379> get list2 "test" 127.0.0.1:6379> RPOP list2 (error) WRONGTYPE Operation against a key holding the wrong kind of value #情況3 正常情況 127.0.0.1:6379> LRANGE list1 0 -1 1) "1" 2) "2" 3) "3" 4) "4" 127.0.0.1:6379> RPOP list1 "4" 127.0.0.1:6379> LRANGE list1 0 -1 1) "1" 2) "2" 3) "3" #情況4 當list為空的情況 127.0.0.1:6379> RPOP list (nil)
#如果想修改某個位置的值 lset
LSET key index value
設置 index 位置的list元素的值為 value。
當index超出範圍時會返回一個error。
127.0.0.1:6379> LRANGE list1 0 -1 1) "1" 2) "2" 3) "3" 127.0.0.1:6379> LSET list1 0 0 OK 127.0.0.1:6379> LRANGE list1 0 -1 1) "0" 2) "2" 3) "3"
#如果想截斷保留list部分空間使用ltrim
LTRIM key start stop
修剪(trim)一個已存在的 list,這樣 list 就會只包含指定範圍的指定元素。start 和 stop 都是由0開始計數的, 這裡的 0 是列表裡的第一個元素(表頭),1 是第二個元素,以此類推。
LTRIM
的一個常見用法是和 LPUSH / RPUSH 一起使用。此場景可用來紀錄日誌,類似環形隊列。以為空間是定長 例如:
- LPUSH mylist someelement
- LTRIM mylist 0 99
127.0.0.1:6379> LRANGE list1 0 -1 1) "0" 2) "2" 3) "3" 127.0.0.1:6379> LTRIM list1 0 1 OK 127.0.0.1:6379> LRANGE list1 0 -1 1) "0" 2) "2"
#如果想在某個list值前後加值可以使用linsert
LINSERT key BEFORE|AFTER pivot value
把 value 插入存於 key 的列表中在基準值 pivot 的前面或後面。
當 key 不存在時,這個list會被看作是空list,任何操作都不會發生。
當 key 存在,但保存的不是一個list的時候,會返回error。
#下麵例子是在2後插入3在2前插入1.
127.0.0.1:6379> LRANGE list1 0 -1 1) "0" 2) "2" 127.0.0.1:6379> LINSERT list1 AFTER 2 3 (integer) 3 127.0.0.1:6379> LINSERT list1 BEFORE 2 1 (integer) 4 127.0.0.1:6379> LRANGE list1 0 -1 1) "0" 2) "1" 3) "2" 4) "3"