在實際業務中我們會將一些熱數據緩存到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視頻教程欄目進行學習!