在實際業務中我們會將一些熱數據緩存到redis裡面,這時候數據量比較大的話,我們就要對這些熱數據進行分頁,分頁的方式有2種: (建議學習:Redis影片教學)
第一:從redis拿出所有資料後,再做記憶體分頁(不建議),熱點數據小的時候可以這樣做,效能相差不是很大,但是當資料量大的時候,分頁期間就會佔用大量內存,或撐爆;
第二:基於redis的資料結構做快取分頁,這裡又分2種
①:基於redis的list資料結構,直接透過list的資料結構,用range方法可以進行分頁,在資料量大的時候,效能也很可觀,但是當存在介面高並發存取時,這個list可能會無限延長,而且裡面的資料會存在很多重複,這就會影響到正常的業務(不是很推薦);
②:基於redis的ZSet資料結構,透過Zset這個有序集合我們也可以做分頁,同樣也是用range方法,但是這裡比較麻煩的是在初始化數據的時候Zset必須存放TypedTuple類型的數據,這個類型是一個value和score的鍵值對,具體可以查百度,這個score的生成比較麻煩我這邊測試時用的是當前資料在這個list的位置,然後Zset是根據這個score值來排序的,預設是從小到大;用這個的好處是,即使在高並發情況下Zset中也不會存在重複資料從而影響正常的業務;而且分頁效率也和list結構差不多;
③:用hash和Zset來一起實現;這是問了一個朋友和得知的,Zset中存儲有序的id字段,通過分頁後拿到id,然後再用id去hash中取,感覺應該效率相差不大的,只是中間多了層從hash結構取,還需要維護另一個hash;(為何這樣做我也不清楚);
貼一張我測試list和ZSet的結果圖
#更多Redis相關技術文章,請造訪Redis入門教學欄位學習!
以上是redis如何做分頁的詳細內容。更多資訊請關注PHP中文網其他相關文章!