2008.08.07发布0.3版本:
changelog:
加入对可变长key/value的支持.
shm.h/.c文件更名为memory.h/.c文件 create_shm/destroy_shm 更名为create_mmap/destroy_mmap
加入头文件config.h, 可用于配置一些参数
加入error.h/error.c 可以保存一些出错的信息
在使用时, 采用create_ccache函数创建ccache_t对象指针,其中的参数min_size和max_size分别指定cache中保存数据的最小和最大尺寸, min_size<=max_size, 当min_size = max_size时, 则是特殊情况, 可用于固定key/value的cache来使用, 节省了不少空间.(当然, 如果你想使用min_size和max_size不相同的cache来存放固定key/value的数据,也是可以的,只不过会浪费一些空间).
在插入/查询/删除数据等操作时,需要将数据封装到一个数据结构中:
typedef struct data_t
{
int datasize; /* the size of the data */
int keysize; /* the size of the key */
char* data; /* the pointer of the data */
char* key; /* the pointer of the key */
}data_t;
注释中对每个字段的含义解释的很清楚.
具体如何使用ccache来操作可变或者固定key/value的数据,请参看test文件夹下面用于压力测试的两个示例文件.
0.4版本(2008-10-31)
1)将原先的线程锁改成了线程读写锁,这个变化会让操作更快些,在查找,遍历操作的时候使用的是读锁,插入,删除,更新,替换等
会改变cache中元素的操作使用的是写锁.
2)将原先的API命名方式做了改变,变为ccache_***方式的命名, 这也是很多项目的命名方式, 但是其他未向外公开的API没有改变
命名方式,我在想是不是要把所有的函数都改成ccache_***的命名方式, 似乎这样更加统一一些.
3)另外, 原来的一个API, update_or_insert_data,命名方式太丑陋了, 改成了replace, 按照现在的命名方式, 这个API的名字
就是ccache_replace.
4)原先的operator.h/.c文件被删除, 取而代之的是functor.h/.c文件, 同时将插入,替换,更新,查找,删除,访问等操作作为函数指针封装到functor_t结构体
中, 这样以后采用其他的数据结构只要初始化不同的函数指针就可以了.
0.5版本(2008-11-14)
1) 加入对红黑树的支持, 可以在编译的时候决定使用的是hash-list还是hash-rbtree结构体进行数据的存储,具体请见makefile
2) 加入了一个数据结构对insert,find,erase,update,replace等操作进行统计, 参见ccache.h中的ccache_stat_t的结构体,另外在
测试程序中也加入了演示打印这些数据的函数,参见test中的测试代码.
3) 对hash-list算法进行了改进, 在访问到某一个节点的时候, 会让这个节点所在的链表位置向前走一步, 这样访问越频繁的节点就越靠近
链表头部,参见ccache_lis.c中的ccache_list_advance函数, 每次访问了某个节点就会去调用该函数.
4) 同样的,LRU链表算法也进行了改善,之前是访问的节点马上就更新到该LRU链表的头部, 现在也更改为每次向前走一步,
参见ccache_lrulist.c中的ccache_lrulist_advance函数.
5) 代码风格的调整, 所有的文件名,函数名, 宏名, 自定义类型名称都加上了"ccache_"前缀.
点击这里下载.
发布了这个版本之后,貌似我想不到其他比较大的feature, 最近的一段时间内除非有bug的改正, 否则不会发布新的版本了,我将抽时间整理出一份文档讲解ccache的实现.
rpm -qi ccache
Name : ccache Relocations: (not relocatable)
Version : 2.4 Vendor: Fedora Project
Release : 11.fc8 Build Date: 2007年10月03日 星期三 00时53分56秒
Install Date: 2008年04月01日 星期二 12时48分33秒 Build Host: xenbuilder2.fedora.redhat.com
Group : Development/Tools Source RPM: ccache-2.4-11.fc8.src.rpm
Size : 86820 License: GPLv2+
Signature : DSA/SHA1, 2007年10月25日 星期四 08时41分28秒, Key ID b44269d04f2a6fd2
Packager : Fedora Project
URL : http://ccache.samba.org/
Summary : C/C++ compiler cache
Description :
ccache is a compiler cache. It acts as a caching pre-processor to
C/C++ compilers, using the -E compiler switch and a hash to detect
when a compilation can be satisfied from cache. This often results in
a 5 to 10 times speedup in common compilations.
原帖由 yangsf5 于 2008-4-3 11:16 发表
还没明白的地方:
这个cache里,可以有多张哈希表。。
建多张表的用意是:可以多张表并行的处理同时要求处理的太多的结点吗?
如果是这样,那个算法是否处理了同个结点的位置唯一性?
原帖由 converse 于 2008-4-2 11:51 发表
同时还有unlock_cache api,因为某些使用C++的用户如果使用了C++的异常处理,在调用ccache中的API时抛出异常将导致ccache没有解锁
, 以后就不能再使用了, 提供这个API是为了在抛出异常的时候用户自己释放锁
原帖由 chenyajun5 于 2008-8-13 11:11 发表
有人把memcached和Berkeley db结合成memcachedb,这样既兼容memcached的协议,又能保证持久性。。。
0.4版本(2008-10-31)
1)将原先的线程锁改成了线程读写锁,这个变化会让操作更快些,在查找,遍历操作的时候使用的是读锁,插入,删除,更新,替换等
会改变cache中元素的操作使用的是写锁.
2)将原先的API命名方式做了改变,变为ccache_***方式的命名, 这也是很多项目的命名方式, 但是其他未向外公开的API没有改变
命名方式,我在想是不是要把所有的函数都改成ccache_***的命名方式, 似乎这样更加统一一些.
3)另外, 原来的一个API, update_or_insert_data,命名方式太丑陋了, 改成了replace, 按照现在的命名方式, 这个API的名字
就是ccache_replace.
4)原先的operator.h/.c文件被删除, 取而代之的是functor.h/.c文件, 同时将插入,替换,更新,查找,删除,访问等操作作为函数指针封装到functor_t结构体
中, 这样以后采用其他的数据结构只要初始化不同的函数指针就可以了.
0.5版本(2008-11-14)
1) 加入对红黑树的支持, 可以在编译的时候决定使用的是hash-list还是hash-rbtree结构体进行数据的存储,具体请见makefile
2) 加入了一个数据结构对insert,find,erase,update,replace等操作进行统计, 参见ccache.h中的ccache_stat_t的结构体,另外在
测试程序中也加入了演示打印这些数据的函数,参见test中的测试代码.
3) 对hash-list算法进行了改进, 在访问到某一个节点的时候, 会让这个节点所在的链表位置向前走一步, 这样访问越频繁的节点就越靠近
链表头部,参见ccache_lis.c中的ccache_list_advance函数, 每次访问了某个节点就会去调用该函数.
4) 同样的,LRU链表算法也进行了改善,之前是访问的节点马上就更新到该LRU链表的头部, 现在也更改为每次向前走一步,
参见ccache_lrulist.c中的ccache_lrulist_advance函数.
5) 代码风格的调整, 所有的文件名,函数名, 宏名, 自定义类型名称都加上了"ccache_"前缀.
点击这里下载.
发布了这个版本之后,貌似我想不到其他比较大的feature, 最近的一段时间内除非有bug的改正, 否则不会发布新的版本了,我将抽时间整理出一份文档讲解ccache的实现.
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |