【Redis】redis分頁查詢理解


偶然在代碼中發現一個接口,接口定義說是分頁查詢,但邏輯實現是Redis。不太理解,Redis怎么分頁?后來看到一篇文章,然后了解了。

1、Zrevrange實現

通過SortedSetzrevrange topicId (page-1)×10 (page-1)×10+perPage指令可以實現分頁功能。

Redis Zrevrange 命令 - 返回有序集中指定區間內的成員,通過索引,分數從高到底。
參考:Redis Zrevrange 命令_返回有序集中指定區間內的成員,通過索引,分數從高到底

詳細了解見原文:在 Redis 中進行分頁排序查詢 | NiuNiu's Note

注:Zrevrange 命令后面的命令值就是索引值。所以不會有問題。

思考:可能會有一個小問題。如果在分頁查詢過程中,有新數據插入。那么已有數據的索引值會改變,這樣就會查到重復數據或者遺失數據了。

而Zrevrangebyscore,如果將數據插入時間點作為score,那么通過score來划分范圍,肯定不會出現數據重復或丟失的情況。

2、Zrevrangebyscore命令實現

另外,我們的代碼中使用的是Zrevrangebyscore命令。

這個命令應該只保證每頁范圍一致,做到不遺漏數據,但不保證每頁數據總數一定。

一般不適用於傳統每頁多少條數據的分頁方式,比較適合於瀑布流或者評論那種動態加載數據的方式。

注:Zrevrangebyscore 命令后面的命令值就是分數值。所以有數據總數不一致情況。

3、參考:

  1. 在 Redis 中進行分頁排序查詢 | NiuNiu's blog
    http://liu-xin.me/2015/11/17/%E5%9C%A8Redis%E4%B8%AD%E8%BF%9B%E8%A1%8C%E5%88%86%E9%A1%B5%E6%8E%92%E5%BA%8F%E6%9F%A5%E8%AF%A2/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM