redis的有序集的實現原理

werflychen發表於2018-11-18

有序集

從使用者的角度來看,有序集,它首先是一個集合,並且,他可以是順序的。按照redis提供的命令來看,他可以通過指定key來查詢成員,另一方面,可以通過指定score分數,來返回一個還區間的有序成員。
如下圖所示:
在這裡插入圖片描述

雜湊方案

如果使用redis中的字典基本資料結構,從邏輯上講,是能滿足需求,在查詢效率方面,能達到近O(1)時間複雜度。但如果要返回區間的時候,則需要進行記憶體排序操作,這個場景效率較慢,需要O(logn)時間複雜度

跳躍表

redis底層資料儲存的一個方案中,有一個使用了跳躍表的方案。這個方案最大的好處是查詢效率接近RBT結構,但儲存的是有序的資料。對於範圍型查詢特別友好。但是,對於找到分值的操作zrank,則時間複雜度由O(1)上升到了O(logn)。

工程實踐

真是redis的底層實踐中,優化考慮了效能優先,使用雜湊+跳躍表的方式。既使用跳躍表保留了範圍查詢的優勢,又使用雜湊使得查詢分值類操作達到O(1)的高效操作

相關文章