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