fatcache 过期时间

cause

fatcache当前存储的方式是跟memcached一样,把过期时间跟key-value放在一起,也就是放在slab的item里面。 对于memcached来说,TA是全内存的,性能上不是问题。但对于fatcache,大部分数据是在磁盘,需要判断数据是否过期时,就因为为了读取过期时间,而导致随机的读磁盘。在有大量过期数据的情况下,性能损耗会比较明显。

solution

为了避免大量过期数据,而导致的大量的随机读磁盘,简单做法可以把过期时间从item里面迁移到itemx(索引,在内存), 每个key-value的索引会增加4bytes, 但同时磁盘数据也减少4bytes。个人觉得这种trade off还是很值得的,我在github上咨询了下fatcache作者的意见,他也认为这是可行的。 详见: https://github.com/twitter/fatcache/issues/18

具体修改代码可以参见我的分支:

https://github.com/git-hulk/fatcache/compare/expiretime_to_itx

end

由于fatcache本身开源没有带测试用例,所以这种不算小的修改,暂时不敢太鲁莽就作为一个pull requset提交给官方,需要一段时间的验证。如果有需要或者考虑用fatcache的人,可以使用看看,有问题我这边也会尽量快的解决。

同时,fatcachestats功能,我也做了一个简单的版本,主要是简单统计一下命中率和slab的使用情况。有兴趣的可以参考: http://www.hulkdev.com/fatcache-stat/ ,当然如果赏脸使用看看的话,那就更好了~~