redis 物件 列表(list)
阿新 • • 發佈:2020-12-12
1. 列表(list)
列表是簡單的字串列表,列表中的每個字串稱為元素 (element),每個元素是有序可重複的。在 redis 中,可以對列表兩端插入(push)和彈出(pop),還可以獲取指定範圍的元素列表、獲取指定索引下標的元素等。列表是一種比較靈活的資料結構,它可以充當棧和佇列的角色。
2. 內部實現
在Redis3.2版本以前列表型別的內部編碼有兩種。
- ziplist(壓縮列表):當列表的元素個數小於list-max-ziplist-entries配置(預設512個),同時列表中每個元素的值都小於list-max-ziplist-value配置時(預設64位元組),Redis會選用ziplist來作為列表的內部實現來減少記憶體的使用。
- linkedlist(連結串列):當列表型別無法滿足ziplist的條件時,Redis會使用linkedlist作為列表的內部實現。
而在Redis3.2版本開始對列表資料結構進行了改造,使用 quicklist 代替了 ziplist 和 linkedlist.
2. 常用命令
命令 | 描述 |
---|---|
移出,並獲取第一個元素,會阻塞列表,直到有元素為止。 | |
移出,並獲取最後一個元素,會阻塞列表,直到有元素為止。 | |
彈出一個值,將插入另外一個列表中並返回它,會阻塞列表,直到有元素為止 | |
通過索引獲取列表中的元素 | |
在列表的元素前或者後插入元素 | |
獲取列表長度 | |
移出,並獲取第一個元素 | |
將一個或者多個插入列表頭部 | |
將一個值插入到已存在的列表頭部 | |
獲取指定範圍內的元素 | |
移除列表元素 | |
通過索引設定列表元素的值 | |
修剪到指定範圍內的清單 | |
從佇列右邊移除一個元素,並返回 | |
移除列表的最後一個元素,並將該元素新增到另一個列表並返回 | |
從列表右邊新增一個或多個元素 | |
從列表右邊新增一個或多個元素,僅佇列存在時有效 |
3. 使用場景
-
訊息佇列 (lpush + brpop)
列表型別可以使用 rpush 實現先進先出的功能,同時又可以使用 lpop 輕鬆的彈出(查詢並刪除)第一個元素,所以列表型別可以用來實現訊息佇列
-
排行榜(lrange + rpush)
lrange命令可以分頁檢視佇列中的資料。可將每隔一段時間計算一次的排行榜儲存在list型別中。如銷量,成績,打榜排行
但是,並不是所有的排行榜都能用list型別實現,只有定時計算的排行榜才適合使用list型別,有序集合支援實時計算的排行榜
-
最新列表(lrange + lpush)
lpush 和 lrange 能實現最新列表的功能,每次通過lpush命令往列表裡插入新的元素,然後通過lrange命令讀取最新的元素列表,如朋友圈的點贊列表、評論列表。
不需要按時範圍查詢,並且不需要分頁,或者更新頻率低