青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

xiaoxiaoling

C++博客 首頁 新隨筆 聯系 聚合 管理
  17 Posts :: 2 Stories :: 9 Comments :: 0 Trackbacks

Redis是工作中很常用的,這里將比較普遍使用的結構研究了下做個備忘。

 

hash

實現和dnspod的dataset半斤八兩,本質上是個二維數組,通過將key哈希作為一維的下表,第二維的數組存相同哈希的元素,查找使用遍歷的方式,所以這里redis做了優化,當滿足條件的時候(數組數量太大)會進行rehash,動態擴大桶的數量來減少最后一維遍歷的次數.

函數名稱

作用

復雜度

dictCreate

創建一個新字典

O(1)

dictResize

重新規劃字典的大小

O(1)

dictExpand

擴展字典

O(1)

dictRehash

對字典進行N步漸進式Rehash

O(N)

_dictRehashStep

對字典進行1步嘗試Rehash

O(N)

dictAdd

添加一個元素

O(1)

dictReplace

替換給定key的value值

O(1)

dictDelete

刪除一個元素

O(N)

dictRelease

釋放字典

O(1)

dictFind

查找一個元素

O(N)

dictFetchValue

通過key查找value

O(N)

dictGetRandomKey

隨機返回字典中一個元素

O(1)

 

字典結構

typedef struct dict {

    // 類型特定函數

    dictType *type;

    // 私有數據

    void *privdata;

    // 哈希表

    dictht ht[2];

    // rehash 索引

    // 當 rehash 不在進行時,值為 -1

    int rehashidx; /* rehashing not in progress if rehashidx == -1 */

    // 目前正在運行的安全迭代器的數量

    int iterators; /* number of iterators currently running */

} dict;

這里哈希表有兩個,一般都用ht[0],當需要rehash的時候會創建一個比ht[0]大的 2 的 N 次方的ht[1],然后漸進式的將數據dictEntry移過去(除了定時的rehash,在每次操作哈希表時都會_dictRehashStep),完成后將ht[1]替換ht[0]

 

zset

zset本質就是list,只不過每個元素都有若干個指向后繼span長的指針,這樣簡單的設計大大提高了效率,使得可以比擬平衡二叉樹,查找、刪除、插入等操作都可以在對數期望時間內完成,對比平衡樹,跳躍表的實現要簡單直觀很多。

 

 

/* ZSETs use a specialized version of Skiplists */

/*

 * 跳躍表節點

 */

typedef struct zskiplistNode {

    // 成員對象

    robj *obj;

    // 分值

    double score;

    // 后退指針

    struct zskiplistNode *backward;

    // 層

    struct zskiplistLevel {

        // 前進指針

        struct zskiplistNode *forward;

        // 跨度

        unsigned int span;

    } level[];

} zskiplistNode;

 

/*

 * 跳躍表

 */

typedef struct zskiplist {

    // 表頭節點和表尾節點

    struct zskiplistNode *header, *tail;

    // 表中節點的數量

    unsigned long length;

    // 表中層數最大的節點的層數

    int level;

} zskiplist;

 

/*

 * 有序集合

 */

typedef struct zset {

 

    // 字典,鍵為成員,值為分值

    // 用于支持 O(1) 復雜度的按成員取分值操作

    dict *dict;

    // 跳躍表,按分值排序成員

    // 用于支持平均復雜度為 O(log N) 的按分值定位成員操作

    // 以及范圍操作

    zskiplist *zsl;

 

} zset;

 

雖然這種方式排序查找很快,但是修改的話就得多做些工作了

 

/* Delete an element with matching score/object from the skiplist.

 *

 * 從跳躍表 zsl 中刪除包含給定節點 score 并且帶有指定對象 obj 的節點。

 *

 * T_wrost = O(N^2), T_avg = O(N log N)

 */

int zslDelete(zskiplist *zsl, double score, robj *obj)

 

intset

typedef struct intset {  

uint32_t encoding; //所使用類型的長度,4\8\16  

uint32_t length; //元素個數  

int8_t contents[]; //保存元素的數組  

} intset;  

 

intset其實就是數組,有序、無重復地保存多個整數值,查找用的是二分查找 * T = O(log N),添加的話在找到對應的數組中應該存在的位子后使用memmove向后移出空位填補(當然需要先realloc預分配空間),同理刪除也是用memmove向前移動

 

set

當使用整數時,使用intset,否則使用哈希表

 

 

其他的關于網絡事件處理,epoll,回調,拆包都和正常使用差不多,關于錯誤處理EINTR(系統調用期間發生中斷)和EAGAIN 繼續重試而如果是EPOLLHUP或EPOLLERR則讓io該讀讀該寫寫,有錯處理就是了。

 

 

posted on 2017-01-24 18:13 clcl 閱讀(295) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            99综合精品| 欧美大片免费久久精品三p| 久久综合一区二区| 久久久精品999| 久久婷婷久久一区二区三区| 久久精品中文| 欧美电影美腿模特1979在线看| 久久激情视频| 毛片av中文字幕一区二区| 欧美成人高清| 99精品视频免费观看视频| 香蕉免费一区二区三区在线观看| 欧美激情国产日韩精品一区18| 欧美激情一区二区| av不卡在线| 久久久精品国产免大香伊 | 国产色综合天天综合网| 国产欧美一级| 亚洲精品欧美专区| 午夜精彩视频在线观看不卡| 久久久久久久精| 亚洲精选国产| 欧美在线观看一区二区三区| 欧美大片免费| 国产亚洲成精品久久| 亚洲日本欧美| 欧美一级欧美一级在线播放| 欧美国产先锋| 午夜精品国产| 欧美日韩成人在线观看| 狠狠色狠狠色综合日日91app| 日韩一级在线| 美女久久一区| 亚洲免费网址| 欧美日韩一区视频| 亚洲日本aⅴ片在线观看香蕉| 欧美专区中文字幕| 这里是久久伊人| 欧美人在线视频| 亚洲激情一区二区| 另类亚洲自拍| 性欧美video另类hd性玩具| 欧美人妖另类| 日韩视频久久| 亚洲高清在线精品| 9i看片成人免费高清| 蜜臀av一级做a爰片久久| 国产视频在线观看一区二区三区 | 欧美一级黄色网| 欧美日韩网址| 亚洲精品欧美精品| 欧美激情精品久久久久久蜜臀 | 欧美一二三区精品| 国产精品一区久久久久| 日韩视频专区| 亚洲国内在线| 欧美肥婆在线| 亚洲免费av电影| 亚洲经典三级| 欧美另类高清视频在线| 日韩网站在线观看| 亚洲精品在线二区| 一本久道久久久| 亚洲电影一级黄| 毛片精品免费在线观看| 亚洲大片在线观看| 欧美黑人多人双交| 欧美风情在线| 亚洲午夜激情网页| 亚洲图片欧洲图片av| 国产精品福利网| 欧美一区三区二区在线观看| 在线一区二区日韩| 国产欧美1区2区3区| 久久精品中文字幕免费mv| 久久精品国产清自在天天线| 亚洲第一精品影视| 亚洲精品国产精品国自产观看| 欧美精品一区二区在线观看| 中文欧美日韩| 欧美在线高清| 亚洲精品综合久久中文字幕| 一区二区av在线| 国产视频一区三区| 欧美暴力喷水在线| 欧美日本精品| 欧美一区二区三区在线看| 欧美一级在线播放| 亚洲国产福利在线| 亚洲精品1234| 国产欧美日韩精品一区| 欧美a级片一区| 欧美香蕉视频| 免费观看30秒视频久久| 欧美区二区三区| 久久久久久久一区| 欧美日韩国产不卡| 久久综合狠狠综合久久综合88| 欧美黄色大片网站| 久久久久久久97| 欧美日韩一区二| 美女国内精品自产拍在线播放| 欧美激情一二三区| 久久久91精品国产一区二区精品| 欧美国产另类| 美国成人直播| 国产亚洲精品一区二区| 亚洲毛片在线观看| 亚洲成在线观看| 午夜亚洲激情| 亚洲欧美精品suv| 欧美精品 日韩| 欧美阿v一级看视频| 国产欧美精品日韩| 99国内精品| 亚洲片区在线| 久久精品国产一区二区三| 亚洲资源av| 欧美日韩国产三区| 亚洲国产成人av在线 | 亚洲国产成人av| 午夜久久久久| 香港成人在线视频| 欧美日韩一区二区高清| 亚洲国产成人午夜在线一区 | 久久激情网站| 国产精品爽黄69| 99pao成人国产永久免费视频| 在线不卡欧美| 欧美与欧洲交xxxx免费观看| 亚洲一区二区精品在线| 欧美成人午夜激情在线| 欧美成人一区二区三区片免费| 国内精品久久久久影院优| 亚洲欧美大片| 欧美在线一级视频| 国产午夜久久| 久久爱www久久做| 久久综合九色综合欧美狠狠| 国产视频在线观看一区| 久久精品99国产精品酒店日本| 久久久xxx| 亚洲第一福利视频| 欧美激情国产高清| 一本久久a久久精品亚洲| 中文亚洲视频在线| 欧美午夜电影完整版| 亚洲五月婷婷| 久久精品国产亚洲高清剧情介绍| 国产婷婷色一区二区三区在线 | 在线免费高清一区二区三区| 久久久噜噜噜久久人人看| 久色婷婷小香蕉久久| 亚洲第一毛片| 欧美视频一区二区三区| 亚洲夜间福利| 久久精品二区三区| 伊人精品久久久久7777| 欧美sm极限捆绑bd| 99视频精品全部免费在线| 亚洲男女毛片无遮挡| 国产亚洲欧美一区| 欧美成ee人免费视频| 99精品欧美一区| 久久九九热re6这里有精品| 在线欧美小视频| 欧美午夜视频在线观看| 久久精品国产一区二区电影| 亚洲精品欧美日韩| 久久精品99国产精品| 最新国产精品拍自在线播放| 欧美日韩在线大尺度| 欧美在线影院在线视频| 最新高清无码专区| 久久久久国产免费免费| 亚洲精品一区二区网址| 国产日韩亚洲欧美| 欧美剧在线观看| 久久精品日产第一区二区| 亚洲美女在线视频| 久久综合九色九九| 亚洲主播在线播放| 亚洲国产精品尤物yw在线观看| 国产精品久久久久久av福利软件 | 亚洲欧美在线另类| 亚洲第一区在线观看| 欧美一区日韩一区| 一本色道久久88精品综合| 亚洲私人影院在线观看| 99av国产精品欲麻豆| 国产一二精品视频| 欧美色图五月天| 99riav1国产精品视频| 亚洲国产成人av在线| 国产精品卡一卡二卡三| 欧美www在线| 久久久久久久综合| 亚洲欧美激情一区| 一区二区三区欧美成人| 亚洲人成网在线播放|