[Redis] Redis 資料結構 - Lists
前言

延續 上篇 討論到 Redis 基礎的資料結構 - String,本篇要討論另一個資料結構 - Lists
什麼是 Lists?
Redis 的 Lists 為有順序的列表,可於列表的起始或末端添加 or 刪除裡頭的元素
來看看 Redis 對 Lists 提供哪些常用的指令吧!
LPUSH
將元素添加到指定 key 裡的列表的第一個位置,可一次寫入多筆元素。
回傳值: 列表的長度
語法:
| 1 |  | 
範例:
於 mylist 裡一次寫入三筆元素 a, b, c
| 1 |  | 
透過 LRANGE 將資料列出來
| 1 |  | 

結果得知,c 在 LPUSH 指令裡面是最尾端,從 LRANGE 得出的結果是放在第一位
LRANGE
語法:
| 1 |  | 
- start索引的起始位置,預設起始點為 0
- stop索引末端的位置,可用 -1 表示最尾端
注意: 超出範圍的索引(Out-of-range indexes)
超出範圍的索引不會產生錯誤,若start大於列表的尾端,則回傳一個的空列表。若stop超過列表末端的實際索引值,Redis 會將其視為列表的最後一個元素。
start > end
stop 超過列表末端的實際索引值
RPUSH
將元素添加到指定 key 裡的列表的末端位置,可一次寫入多筆元素。
回傳值: 列表的長度
語法:
| 1 |  | 
範例:
於 pushlist 裡一次寫入三筆元素 d, e, f
| 1 |  | 
透過 LRANGE 將資料列出來
| 1 |  | 

RPUSHX && LPUSHX
RPUSHX 類似前述的 RPUSH 方法,於列表的末端插入一個 or 多個元素,只是 RPUSHX 需指定的 key 是已存在 Redis 的情況下才會添加新元素,而 LPUSHX 也是一樣的概念。 
回傳值: 列表的長度
語法:
| 1 |  | 
若原始的 key 不存在 Redis, 回傳值為 0
反之若 key 存在則會添加元素
| 1 |  | 

| 1 |  | 

RPOP
- LPOP:刪除並回傳存在 key 的列表裡 第一個元素
- RPOP:刪除並回傳存在 key 的列表裡 最後一個元素
- 若元素不存在,回傳值為 (nil)
- 可指定移除元素的數量(指定個數超過原有數量時表 全部移除)
語法:
| 1 |  | 
[count] 為刪除的個數,
範例1: 移除單一元素
將 pushlist 裡的最後一個元素 "c" 移除
| 1 |  | 

範例2: 移除多個元素
把語法裡的 count 參數加進來,指定要移除的元素個數
| 1 |  | 
LTRIM
LTRIM 用來擷取特定範圍的元素
語法:
| 1 |  | 
- start以 0 為起始點開始索引的位置
- stop索引的終點,可用- -1表最後一個元素
範例:
在 trimlist 裡有三個元素:**”one”, “two”, “three”**
| 1 |  | 
取出 “two”, “three” 兩個元素
| 1 |  | 

Note:
超出範圍的索引不會產生錯誤如:start大於列表的尾端,或者start>end,回傳值是一個 空列表(這會導致 key 被刪除)。如果end大於列表的尾端,Redis 會將其視為列表的最後一個元素。
LSET
指定索引位置所在的元素進行替換
語法:
| 1 |  | 
範例:
於 lset 裡放置三個元素:”one”, “two”, “three”
| 1 |  | 
分別對第0、倒數第2個元素做替換
| 1 |  | 

LINDEX
查找指定索引位置所在的元素,回傳找到的元素,若超過 list 索引的位置則回傳 (nil)
語法:
| 1 |  | 
範例:
list 添加三個元素 “one”, “two”, “three”
| 1 |  | 
查找索引位置在 2 的元素
| 1 |  | 
LINSERT
於列表裡挑出一個元素作為參考點,選擇於參考點的前 or 後添加新元素
語法:
| 1 |  | 
pivot 指定作為參考點的元素
範例:
| 1 |  | 
於元素 “one” 前方插入新的元素 “zero”
| 1 |  | 
於元素 “three” 後方插入新的元素 “four”
| 1 |  | 
若參考點不存在時,回傳值為 -1
| 1 |  | 
若 key 不存在時,回傳值為 0
LLEN
查找存在 key 的列表的長度。
語法:
| 1 |  | 
LREM
用於刪除 key 列表中出現特定次數的指定元素
| 1 |  | 
count 參數表指定的次數
規則如下:
- count > 0: 刪除 key 列表中 從起始點到終點出現特定次數的指定元素
- count < 0: 刪除列表中 從終點到起始點 出現特定次數的指定元素
- count = 0: 刪除 所有 存於 key 列表中的指定元素
範例1: 從終點到起始點移除元素
建立 mylist 列表,列表內的值包含 4 個 “hello”, 1 個 “world” 的元素
| 1 |  | 
現在要 mylist 裡從 終點開始 移除 2 個 hello 元素
| 1 |  | 
重新查看 mylist 得到新的結果是最後兩個 “hello” 元素已從 Redis 內移除
範例2: 從起始點到終點移除元素
建立 fruit 列表,列表內的值包含 3 個 “mango”, 1 個 “peach”, 1 個 “peach”, 1 個 “banana” 和 1 個 grape 的元素
| 1 |  | 
現在要 fruit 裡從 起點開始 移除 2 個 mango 元素
| 1 |  | 
重新查看 fruit 得到新的結果是最前面的兩個 “mango” 元素已從 Redis 內移除
範例3: 移除所有元素
重複範例二的資料,只是這次將 count 設為 0 
| 1 |  | 
總結
看完前面所有的指令及範例,大概能了解如何在 Lists 裡新增、刪除、查詢及修改元素,下一篇紀錄 Redis 儲存物件用的資料結構 - Hash