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