新聞中心
Redis跳躍表屬于常用的非關系型數(shù)據(jù)庫數(shù)據(jù)結(jié)構(gòu),作為一種索引結(jié)構(gòu),其事件復雜度達到O(logn),性能比紅黑樹要高數(shù)倍,是實現(xiàn)高效查找的精妙之樹。

網(wǎng)站設計、成都網(wǎng)站制作,成都做網(wǎng)站公司-創(chuàng)新互聯(lián)公司已向上千企業(yè)提供了,網(wǎng)站設計,網(wǎng)站制作,網(wǎng)絡營銷等服務!設計與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗,合理的價格為您打造企業(yè)品質(zhì)網(wǎng)站。
Redis跳躍表(Skiplist)是一種內(nèi)存數(shù)據(jù)結(jié)構(gòu),將數(shù)據(jù)組織為多級索引,以概率的方式實現(xiàn)了O(logN)復雜度的查找算法,性能比紅黑樹要高數(shù)倍。
Redis跳躍表由節(jié)點node組成,每個Node有幾個字段:score,value,level,backward和forward,以及一個指針數(shù)組forward。score和value字段用于存儲用戶數(shù)據(jù),level字段表示節(jié)點所在的層級,backward和forward字段分別表示節(jié)點的前驅(qū)和后繼節(jié)點,forward指針數(shù)組用來實現(xiàn)跳躍表跳躍查找機制。
Redis跳躍表節(jié)點存儲結(jié)構(gòu)示意圖如下:

利用Redis跳躍表實現(xiàn)高效查找有2種方法:
(1)普通查詢:
普通查詢根據(jù)score進行查詢,從跳躍表頭節(jié)點開始遍歷,比較當前節(jié)點的score,若score滿足條件則找到正確結(jié)果,若score不滿足條件則向下移動查找。
下面的代碼演示了Redis跳躍表的普通查詢方法:
// redis skip list common query
node *curnode;
for (curnode = head; curnode != NULL && curnode->level[0].forward != NULL; )
{
if (curnode->level[0].forward->score >= score)
curnode = curnode->level[0].forward;
else
break;
}
if (curnode->score == score) {
// get score node
}
```
(2)范圍查詢:
范圍查詢根據(jù)score的范圍進行查詢,從跳躍表頭節(jié)點開始遍歷。先從最底層level[0]節(jié)點開始向后遍歷,找到第一個score大于等于min_score的節(jié)點node;接著從最高層level[n]找到最后一個score小于等于max_score的節(jié)點node'。之后使用node和node'進行范圍遍歷level[0]節(jié)點,得到所有滿足條件的節(jié)點。
下面的代碼演示了Redis跳躍表的范圍查詢方法:
// redis skip list range query
node *min_node, *max_node;
for (int i = SKIP_LIST_MAX_LEVEL-1; i >= 0; i–)
{
for (min_node = head->level[i].forward; min_node != NULL && min_node->score level[i].forward);
for (max_node = head->level[i].forward; max_node != NULL && max_node->score level[i].forward);
if (min_node && max_node) {
break;
}
}
for (node *curnode=min_node; curnode && curnode->scorelevel[0].forward)
{
// get range node
}
“`
以上是Redis跳躍表實現(xiàn)高效查找的實現(xiàn)原理,它的優(yōu)勢在于可以用一種簡單的非線性結(jié)構(gòu)獲得接近于線性的查找性能,節(jié)省大量的時間資源,
實現(xiàn)了高效查找的精妙之樹。未來Redis跳躍表的發(fā)展前景廣闊,期待更多的應用場景出現(xiàn)。
成都網(wǎng)站設計制作選創(chuàng)新互聯(lián),專業(yè)網(wǎng)站建設公司。
成都創(chuàng)新互聯(lián)10余年專注成都高端網(wǎng)站建設定制開發(fā)服務,為客戶提供專業(yè)的成都網(wǎng)站制作,成都網(wǎng)頁設計,成都網(wǎng)站設計服務;成都創(chuàng)新互聯(lián)服務內(nèi)容包含成都網(wǎng)站建設,小程序開發(fā),營銷網(wǎng)站建設,網(wǎng)站改版,服務器托管租用等互聯(lián)網(wǎng)服務。
標題名稱:Redis跳躍表實現(xiàn)高效查找的精妙之樹(redis 跳躍表 樹)
轉(zhuǎn)載來于:http://m.fisionsoft.com.cn/article/dpdghcj.html


咨詢
建站咨詢
