Seacache类似Memcahced, 单文件实现, 支持并发, 比传统分离小文件缓存方式性能提高一倍
由于缓存文件只有一个,PHP最大寻址能力是2G,过大会指针溢出, 所以只能支持1G的缓存
特点如下:
- 纯php实现, 无须任何扩展,支持php4 / 5
- 使用lru算法自动清理过期内容
- 可以安全用于多进程并发
- 最大支持1G缓存文件
- 使用hash定位,读取迅速
项目下载地址
require('../secache/secache.php');
$cache = new secache;
$cache->workat('test2_cache');
for($i=1;$i<20;$i++){
$cache->store(md5($i.'_key'),$i);
}
for($i=1;$i<20;$i++){
$key = md5($i.'_key');
if($cache->fetch($key,$return)){
echo '<li>'.$key.'=>'.$return.'</li>';
}else{
echo '<li>Data get failed! <b>'.$key.'</b></li>';
}
}
echo "<hr>";
$key = md5("20_key");
if( $cache->search($key,$return) ){
echo PHP_EOL.$key."=>".$return;
}else{
echo "not find";
}
基于性能考虑有几点说明:
- 键需要自己做has处理,最长32为
- 值必须是字符串,如果为对象请自己先serialize
下面详细说明secache的实现原理
secache是一个采用拉链法的hash结构。整个文件分成2个主要部分:
- 结构信息区结构信息区
- 保留空间 20字节,放置一个
- 保留空间 20字节,放置文件的版本信息,最大容量
- 20字节保留区域
- 结构信息 16种slab结构,每个需要24字节,占用空间:24*16=384字节
- 索引信息区
1.索引计数器数据 40-44
2.数据最大空间指针 44-48
3.空闲链表入口地址 48-52
4.hash索引入口地址 (16^4)*4 = 256k
- 数据区(混杂)
- 索引链表
- 数据链表