ccache(common cache)是一個使用共享內(nèi)存實現(xiàn)的cache靜態(tài)庫,在節(jié)點數(shù)據(jù)不足時采用LRU算法進行節(jié)點的淘汰.
與memcache的區(qū)別在于,首先memcache是一個完整的server程序,不僅有cache的處理操作,還需要監(jiān)聽及處理客戶端的操作請求,而ccache只是一個靜態(tài)庫,只關(guān)心cache的處理操作;其次,memcache采用了內(nèi)存去管理數(shù)據(jù),程序一旦停止,其中的數(shù)據(jù)全部丟失,而ccache采用了mmap的方式去管理數(shù)據(jù),也就是每個cache都用一個與之對應(yīng)的文件,一定程度上保證了數(shù)據(jù)不至于在程序停止的時候丟失;第三,memcache實現(xiàn)了對不定長key和data的支持,而cache目前(version 0.1)只支持定長的key和data,也就是同一個cache只能管理一個類型的key和data.
當前的版本(version0.1)采用hash-list的形式管理數(shù)據(jù),LRU算法在節(jié)點數(shù)據(jù)不足時進行淘汰數(shù)據(jù).
今后的版本需要完成的主要功能:
1)實現(xiàn)對不定長key和data的處理支持.
2)降低鎖粒度,目前ccache在對數(shù)據(jù)進行操作時,都是對cache全局加鎖,以后希望能做到降低這個加鎖的粒度,使效率更高.
3)加入hash-rbtree的形式管理數(shù)據(jù).
test/testcache.c是一個演示如何使用ccache的程序,目前僅在多進程的情況下進行測試,由于我本人對多線程不太熟悉,所以沒有做多線程情況下的測試.
另外,由于使用了線程鎖,所以在編譯的時候需要鏈接pthread庫.
項目地址:
http://code.google.com/p/commoncache/(注:請下載其中的ccache0.1.rar文件包,原先的cache.rar有一些問題)