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

            那誰的技術博客

            感興趣領域:高性能服務器編程,存儲,算法,Linux內核
            隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
            數據加載中……

            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) 評論(1)  編輯 收藏 引用 所屬分類: ccache

            評論

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

            開源,大力支持?。?
            中國缺少這樣的東西
            2010-03-10 19:37 | jesse
            国产综合成人久久大片91| 天天躁日日躁狠狠久久| 大香网伊人久久综合网2020| 久久婷婷人人澡人人| 亚洲中文字幕无码久久精品1| 久久国产乱子伦免费精品| 久久se精品一区二区影院| 亚洲中文字幕久久精品无码APP | 久久99国产精品久久99果冻传媒| 国产999精品久久久久久| 亚洲国产欧美国产综合久久| 激情综合色综合久久综合| 久久发布国产伦子伦精品 | 亚洲欧美伊人久久综合一区二区| 国产成人久久精品区一区二区| 亚洲国产精品综合久久一线| 国产福利电影一区二区三区久久久久成人精品综合 | 久久久久国产精品人妻| 午夜不卡888久久| 久久久av波多野一区二区| 亚洲综合久久夜AV | 精品久久久久国产免费| 久久九九有精品国产23百花影院| 久久伊人精品一区二区三区| 久久精品国产黑森林| 成人午夜精品久久久久久久小说| 久久99精品久久久久婷婷| 亚洲精品无码久久久久去q| 思思久久99热只有频精品66| 精品无码人妻久久久久久| 91久久精品国产成人久久| 国产精品久久久久影院嫩草| 久久精品国产精品亚洲毛片 | 精品久久久久久中文字幕大豆网 | AV无码久久久久不卡蜜桃 | 亚洲欧美一级久久精品| 亚洲人成无码www久久久| 婷婷久久综合| 久久亚洲日韩看片无码| 日韩乱码人妻无码中文字幕久久 | 亚洲va久久久噜噜噜久久狠狠|