最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Redis的List實(shí)現(xiàn)緩存分頁(yè)信息

 更新時(shí)間:2026年02月24日 09:09:31   作者:寫碼小C  
Redis List 是基于雙向鏈表實(shí)現(xiàn)的有序集合(按插入順序排序),借助 lrange 命令可快速實(shí)現(xiàn)分頁(yè)查詢,相比傳統(tǒng)數(shù)據(jù)庫(kù)(如 MySQL)的 limit offset 分頁(yè),Redis List 分頁(yè)在熱點(diǎn)數(shù)據(jù)、小范圍分頁(yè)場(chǎng)景下性能更穩(wěn)定,本文給大家介紹了如何使用Redis的List實(shí)現(xiàn)緩存分頁(yè)信息

一、Redis List 分頁(yè)的核心價(jià)值

Redis List 是基于雙向鏈表實(shí)現(xiàn)的有序集合(按插入順序排序),借助 lrange 命令可快速實(shí)現(xiàn)分頁(yè)查詢,相比傳統(tǒng)數(shù)據(jù)庫(kù)(如 MySQL)的 limit offset 分頁(yè),Redis List 分頁(yè)在熱點(diǎn)數(shù)據(jù)、小范圍分頁(yè)場(chǎng)景下性能更穩(wěn)定,且純內(nèi)存操作響應(yīng)耗時(shí)極低,常被用于緩存“最新文章列表、評(píng)論列表、消息列表”等按時(shí)間排序的分頁(yè)場(chǎng)景。

二、核心 API 與分頁(yè)實(shí)現(xiàn)邏輯

1. 核心分頁(yè)命令:LRANGE(只讀,不修改原數(shù)據(jù))

(1)命令格式

LRANGE key start stop
  • key:List 類型的鍵名;
  • start:起始索引(從 0 開始,負(fù)數(shù)表示倒數(shù),如 -1 代表最后一個(gè)元素);
  • stop:結(jié)束索引(包含該索引,-1 可表示查詢所有元素)。

(2)核心特性

LRANGE只讀操作,僅返回指定范圍的元素,不會(huì)移除 List 中的元素(區(qū)別于 LPOP/RPOP 等刪除類命令)。

2. 分頁(yè)實(shí)現(xiàn)公式(通用)

假設(shè)分頁(yè)參數(shù)為:

  • pageNum:當(dāng)前頁(yè)碼(從 1 開始);
  • pageSize:每頁(yè)展示條數(shù);

則分頁(yè)的索引計(jì)算規(guī)則:

start = (pageNum - 1) * pageSize
stop = pageNum * pageSize - 1

3. 完整實(shí)戰(zhàn)示例

(1)初始化測(cè)試數(shù)據(jù)

article:list(文章 ID 列表)插入 10 條數(shù)據(jù)(按發(fā)布時(shí)間從新到舊排序):

# 從右側(cè)插入(保證新數(shù)據(jù)在列表頭部/尾部,根據(jù)業(yè)務(wù)調(diào)整)
RPUSH article:list 101 102 103 104 105 106 107 108 109 110

(2)分頁(yè)查詢操作

第 1 頁(yè)(每頁(yè) 5 條):

LRANGE article:list 0 4  # 返回 [101, 102, 103, 104, 105]

第 2 頁(yè)(每頁(yè) 5 條):

LRANGE article:list 5 9  # 返回 [106, 107, 108, 109, 110]

查詢所有數(shù)據(jù)(兜底場(chǎng)景):

LRANGE article:list 0 -1  # 返回全部 10 條數(shù)據(jù)

三、List 分頁(yè)相關(guān)輔助 API

命令作用示例
RPUSH/LPUSH向 List 尾部/頭部插入數(shù)據(jù)(初始化分頁(yè)數(shù)據(jù))RPUSH article:list 111 112
LLEN獲取 List 總長(zhǎng)度(計(jì)算總頁(yè)數(shù))LLEN article:list → 返回 10
LPOP/RPOP移除并返回頭部/尾部元素(清理過期數(shù)據(jù))LPOP article:list → 返回 101
LTRIM修剪 List,僅保留指定范圍元素(分頁(yè)后清理)LTRIM article:list 0 99

實(shí)戰(zhàn):結(jié)合 LLEN 計(jì)算總頁(yè)數(shù)

# 1. 獲取總條數(shù)
LLEN article:list → 10
# 2. 計(jì)算總頁(yè)數(shù)(每頁(yè) 5 條)
總頁(yè)數(shù) = CEIL(總條數(shù) / pageSize) → CEIL(10/5) = 2

四、Redis List 分頁(yè)的優(yōu)勢(shì)與局限

1. 優(yōu)勢(shì)

  • 性能穩(wěn)定:純內(nèi)存操作,小范圍分頁(yè)(前幾頁(yè))耗時(shí)微秒級(jí),遠(yuǎn)快于 MySQL 大 offset 分頁(yè);
  • 實(shí)現(xiàn)簡(jiǎn)單:僅需 LRANGE 命令,無需復(fù)雜語(yǔ)法,開發(fā)成本低;
  • 有序性保障:List 按插入順序排序,天然適配“最新優(yōu)先”類分頁(yè)場(chǎng)景(如消息、評(píng)論)。

2. 局限

  • 索引訪問性能:List 底層是雙向鏈表,LRANGE 按索引訪問為 O(n) 復(fù)雜度,分頁(yè) offset 過大(如查詢第 1000 頁(yè))時(shí)性能下降;
  • 排序能力弱:僅支持插入順序(某端插入時(shí)候的順序,取決于用法),無法按自定義字段(如時(shí)間、熱度)排序;
  • 數(shù)據(jù)量限制:不適用于超大規(guī)模 List(百萬(wàn)級(jí)以上),易導(dǎo)致內(nèi)存占用過高。

五、最佳實(shí)踐

1. 適用場(chǎng)景

  • 熱點(diǎn)分頁(yè):僅需查詢前 N 頁(yè)(如前 10 頁(yè))的場(chǎng)景(如首頁(yè)文章列表);
  • 有序列表:數(shù)據(jù)按插入順序展示,無需自定義排序(如用戶消息流)。

2. 避坑點(diǎn)

  • 不要用 LRANGE 做超大 offset 分頁(yè):offset 過大時(shí),建議改用 Sorted Set(ZSET)+ 游標(biāo)分頁(yè)
  • 區(qū)分“查詢”與“刪除”:LRANGE 僅查詢,如需“取數(shù)據(jù)并刪除”,可結(jié)合 LRANGE + LTRIM;
  • 控制 List 長(zhǎng)度:通過 LTRIM 定期清理過期數(shù)據(jù),避免 List 無限膨脹(如僅保留最近 1000 條)。

3. 替代方案(補(bǔ)充)

若需按自定義字段排序 / 超大分頁(yè),建議使用 Redis Sorted Set(ZSET),通過 ZRANGE 實(shí)現(xiàn)分頁(yè),兼顧排序與高性能。

六、小結(jié)

Redis List + LRANGE 是實(shí)現(xiàn)“簡(jiǎn)單有序分頁(yè)”的最優(yōu)解,核心優(yōu)勢(shì)是實(shí)現(xiàn)簡(jiǎn)單、性能穩(wěn)定,適合熱點(diǎn)小范圍分頁(yè)場(chǎng)景;使用時(shí)需注意控制 List 長(zhǎng)度、避免超大 offset 分頁(yè),若需更復(fù)雜的排序/分頁(yè)需求,可切換至 ZSET 實(shí)現(xiàn)。

以上就是使用Redis的List實(shí)現(xiàn)緩存分頁(yè)信息的詳細(xì)內(nèi)容,更多關(guān)于Redis List緩存分頁(yè)信息的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Redis 刪除策略的三種實(shí)現(xiàn)

    Redis 刪除策略的三種實(shí)現(xiàn)

    本文主要介紹了Redis 刪除策略的三種實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • redis批量操作pipeline管道操作方法

    redis批量操作pipeline管道操作方法

    Redis本身是基于一個(gè)Request一個(gè)Response方式的同步請(qǐng)求,正常情況下,客戶端發(fā)送一個(gè)命令,這篇文章主要介紹了redis批量操作pipeline管道,需要的朋友可以參考下
    2022-09-09
  • 最新評(píng)論

    马龙县| 交口县| 奇台县| 张掖市| 察雅县| 吉林市| 湟中县| 南丰县| 山丹县| 灯塔市| 定结县| 永寿县| 昌邑市| 乌鲁木齐县| 青海省| 沙洋县| 溧水县| 满城县| 无为县| 冷水江市| 类乌齐县| 景泰县| 凤翔县| 石渠县| 延津县| 岳阳市| 靖边县| 祁阳县| 玉门市| 滕州市| 渝中区| 肥东县| 时尚| 汉源县| 上高县| 大同市| 涞水县| 乡城县| 开原市| 宁河县| 合川市|