• <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>

            那誰的技術(shù)博客

            感興趣領(lǐng)域:高性能服務(wù)器編程,存儲(chǔ),算法,Linux內(nèi)核
            隨筆 - 210, 文章 - 0, 評(píng)論 - 1183, 引用 - 0
            數(shù)據(jù)加載中……

            The design and implementation of CommonCache Library(base on version 0.6)


            1. Overview

            a) the functions of a cache
            cache the most frequently visited data in the memory, so:
            1) if the the data get losed is not a big matter,it means that you should not store data
            in cache only, offen, cache is between the DB server and application,hence reduce visiting DB times
             and speed up application.
            2) since the memory is not quite big, so the eliminating algorithm such LRU must to be used.
            3) must support key-value-like API such as find/erase/set and so forth.

            b) ccache feature (version 0.6):
            1) using mmap to cache data in file, so it can be used in multi-thead and multi-process application.
            2) support unfix size key node
            3) support hash-rbtree and hash-list structure
            4) use LRU algorithm to eliminate nodes when it is running out of its memory size
            5) fast, 100W/read operation on fix-size key node in no more than 0.5 second

            c) what is the difference between ccache and memcached?
            ccache is a static library, memcached is a cache sever, so users who use ccache must
            design the protocols between clients and server, and write the server application themself.

            2. implementation
            a) the cache file structure


            b) the hashitem array detail   
            the hashitem array is used to find the node base on the node key.Every nodes in a
            same hashitem has a same hash num.All the nodes in the same hashitem are strutured
            in list or rbtree:


            when compiling the ccache, define the macro CCACHE_USE_RBTREE to specily using rbtree,
            else macro CCACHE_USE_LIST using list. The structrue ccache_node_t has following fields
            about this:

            typedef struct ccache_node_t
            {
                    
            /* 
                      
                     
            */

            #ifdef CCACHE_USE_LIST
                
            struct ccache_node_t *next, *prev;
            #elif defined CCACHE_USE_RBTREE    
                ccache_color_t color;
                
            struct ccache_node_t *parent, *left, *right;
            #endif

                    
            /* 
                      
                     
            */

            }
            ccache_node_t;

            the hashitem array size is defined in the configure file when open the cache.

            c) the freearea array detail   
            ccache use slab-like algorithm to allocate node memory.In the configure file, there is an
            item called "alignsize", this value specify the align size between different freearea,
            assume the alignsize is 8 bytes:

            all the nodes in the same freearea has the same size, when allocating a node(ccache_memory.c/ccache_allocate):
            1) allign the node size with the alignsize value, then find the fit
            freearea(ccache_memory.c/ccache_get_freeareaid) and return the freeareaid
            2) if the data zone has enough memory for the node, change the cache->start_free and cache->freesize
            and return the node pointer
            3) else, erase the  cache->freearea[freeareaid]->lrulast node, use this node memory
            for this allocation.
            4) every time a node allocated, place it in the freearea's tail(freearea->lrulast = node),
            when the node has been visited, it move on one step in the freearea list.So, the more a node has been
            visited, the closer it moves to the freearea head(freearea->lrufirst).Hence, the freearea lrulast
            node is the less frequently visited node in the freearea(although not so accurate:).

            the ccache_node_t structure has following fields about LRU:

            typedef struct ccache_node_t
            {
                
            /*
                   .
                
            */
                   
                
            struct ccache_node_t *lrunext, *lruprev;

                
            /*
                   .
                
            */
                   
            }
            ccache_node_t;

             

             

            posted on 2009-10-22 21:11 那誰 閱讀(4118) 評(píng)論(1)  編輯 收藏 引用 所屬分類: ccache

            評(píng)論

            # re: The design and implementation of CommonCache Library(base on version 0.6)  回復(fù)  更多評(píng)論   

            開源,大力支持啊!
            中國缺少這樣的東西
            2010-03-10 19:37 | jesse
            国产美女久久精品香蕉69| 9久久9久久精品| 人妻系列无码专区久久五月天| 国产精品内射久久久久欢欢| 亚洲国产综合久久天堂| 亚洲AV无码1区2区久久| 国产国产成人精品久久| 亚洲精品tv久久久久| 国产精品久久久福利| 亚洲欧美精品一区久久中文字幕| 一本色道久久综合狠狠躁 | 久久久久久极精品久久久| 欧美国产精品久久高清| 久久国产高潮流白浆免费观看| 久久国产成人| 国内精品伊人久久久久av一坑| 麻豆久久| 国产成人无码精品久久久免费 | 亚洲国产成人久久综合碰碰动漫3d| 欧美性大战久久久久久| 日本精品久久久久中文字幕8| 久久精品一区二区三区AV| 久久国产美女免费观看精品| 精品无码久久久久久尤物| 久久无码AV一区二区三区| 久久综合九色综合精品| 少妇精品久久久一区二区三区| 欧美精品一区二区久久| 99久久免费只有精品国产| 91久久精品91久久性色| 色狠狠久久AV五月综合| 亚洲中文字幕无码久久综合网 | 国产精品久久久久久久久鸭| 亚洲AV日韩AV永久无码久久| 久久天天婷婷五月俺也去| 久久青青国产| 久久精品成人欧美大片| 久久午夜无码鲁丝片秋霞| 77777亚洲午夜久久多喷| 综合网日日天干夜夜久久| 久久人人爽人人爽人人av东京热|