• <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 那誰 閱讀(4112) 評(píng)論(1)  編輯 收藏 引用 所屬分類: ccache

            評(píng)論

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

            開源,大力支持啊!
            中國(guó)缺少這樣的東西
            2010-03-10 19:37 | jesse
            婷婷五月深深久久精品| 久久精品无码专区免费| 久久久精品久久久久影院| 亚洲国产一成久久精品国产成人综合 | 国产成人精品久久免费动漫| 国产精品一久久香蕉产线看| 国内精品久久久久久不卡影院| 久久久久久毛片免费看| 少妇无套内谢久久久久| 69国产成人综合久久精品| 久久91精品综合国产首页| 久久久久久精品成人免费图片| 久久久久国产精品熟女影院| 国产99久久久国产精品~~牛| 伊人色综合久久天天人守人婷| 久久综合给合久久狠狠狠97色| 久久久久女教师免费一区| 久久狠狠爱亚洲综合影院| www亚洲欲色成人久久精品| 久久久久亚洲av综合波多野结衣| 久久不射电影网| 99蜜桃臀久久久欧美精品网站 | 国产精品丝袜久久久久久不卡| 久久人人爽人人爽人人片AV不 | 久久亚洲精品国产亚洲老地址| aaa级精品久久久国产片| 香蕉久久夜色精品国产2020| 久久国产一区二区| 国产成人无码精品久久久性色| 久久亚洲AV无码西西人体| 久久精品国产91久久综合麻豆自制| 综合久久国产九一剧情麻豆| 青青草原综合久久大伊人导航| 欧美综合天天夜夜久久| 99麻豆久久久国产精品免费| 久久久国产乱子伦精品作者| 中文字幕日本人妻久久久免费 | 九九久久精品国产| 国产精品99久久不卡| 97久久精品人人做人人爽| 999久久久免费国产精品播放|