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

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

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

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

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

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

1. 核心分頁命令: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. 分頁實(shí)現(xiàn)公式(通用)

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

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

則分頁的索引計(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)分頁查詢操作

第 1 頁(每頁 5 條):

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

第 2 頁(每頁 5 條):

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

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

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

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

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

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

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

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

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

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

2. 局限

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

五、最佳實(shí)踐

1. 適用場(chǎng)景

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

2. 避坑點(diǎn)

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

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

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

六、小結(jié)

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

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

相關(guān)文章

  • 關(guān)于Redis的內(nèi)存淘汰策略詳解

    關(guān)于Redis的內(nèi)存淘汰策略詳解

    當(dāng)內(nèi)存空間使用達(dá)到限制時(shí),Redis 會(huì)根據(jù)配置策略來選擇不同處理方式,要么返回 errors,要么按照不同的策略算法來清除一些舊數(shù)據(jù),達(dá)到回收內(nèi)存的目的,這就是 Redis 的內(nèi)存淘汰,有些文章中,內(nèi)存淘汰也叫緩存回收,需要的朋友可以參考下
    2023-05-05
  • 一篇文章讓你明白R(shí)edis主從同步

    一篇文章讓你明白R(shí)edis主從同步

    今天小編就為大家分享一篇關(guān)于一篇文章讓你明白R(shí)edis主從同步,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 詳解Redis中key的命名規(guī)范和值的命名規(guī)范

    詳解Redis中key的命名規(guī)范和值的命名規(guī)范

    這篇文章主要介紹了詳解Redis中key的命名規(guī)范和值的命名規(guī)范,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 使用redis生成唯一編號(hào)及原理示例詳解

    使用redis生成唯一編號(hào)及原理示例詳解

    今天介紹下如何使用redis生成唯一的序列號(hào),其實(shí)主要思想還是利用redis單線程的特性,可以保證操作的原子性,使讀寫同一個(gè)key時(shí)不會(huì)出現(xiàn)不同的數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧
    2021-09-09
  • Redis哨兵集群模式全方位解讀

    Redis哨兵集群模式全方位解讀

    Redis哨兵集群通過心跳檢測(cè)實(shí)現(xiàn)主從自動(dòng)故障轉(zhuǎn)移,當(dāng)主節(jié)點(diǎn)宕機(jī)時(shí),依據(jù)斷開時(shí)間、優(yōu)先級(jí)、offset和運(yùn)行ID規(guī)則選舉新主,腦裂問題因網(wǎng)絡(luò)分割導(dǎo)致數(shù)據(jù)沖突,可通過配置參數(shù)限制同步延遲和從節(jié)點(diǎn)數(shù)量來避免數(shù)據(jù)丟失
    2025-09-09
  • Redis配置文件redis.conf詳細(xì)配置說明

    Redis配置文件redis.conf詳細(xì)配置說明

    本文列出了Redis的配置文件redis.conf的各配置項(xiàng)的詳細(xì)說明,簡(jiǎn)單易懂
    2018-03-03
  • Redis數(shù)據(jù)庫存儲(chǔ)鍵值對(duì)的底層原理分析

    Redis數(shù)據(jù)庫存儲(chǔ)鍵值對(duì)的底層原理分析

    Redis是一種內(nèi)存數(shù)據(jù)庫,使用哈希表存儲(chǔ)鍵值對(duì),它通過哈希函數(shù)計(jì)算鍵的存儲(chǔ)地址,并通過地址找到數(shù)據(jù),當(dāng)出現(xiàn)哈希沖突時(shí),Redis使用鏈地址法解決,為優(yōu)化性能,Redis采用漸進(jìn)式哈希表遷移技術(shù),逐步將數(shù)據(jù)從舊哈希表遷移到新哈希表,減少對(duì)業(yè)務(wù)的影響
    2026-03-03
  • 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)論

    明水县| 山东省| 西安市| 耒阳市| 石屏县| 普兰店市| 紫金县| 平果县| 陇南市| 延边| 葫芦岛市| 龙江县| 闻喜县| 博湖县| 两当县| 宣汉县| 漯河市| 繁昌县| 赤峰市| 通道| 连平县| 佳木斯市| 安丘市| 通榆县| 疏附县| 长沙县| 搜索| 吴忠市| 绿春县| 汉寿县| 开鲁县| 祁阳县| 五原县| 平远县| 阳谷县| 澎湖县| 灵山县| 富裕县| 博罗县| 永吉县| 邓州市|