[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
索引的起始位置,預設起始點為 0stop
索引末端的位置,可用 -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