当前位置: 首页 > 工具软件 > Secache > 使用案例 >

PHP文件缓存secache

呼延运恒
2023-12-01

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个主要部分:

  • 结构信息区结构信息区
  1. 保留空间 20字节,放置一个
  2. 保留空间 20字节,放置文件的版本信息,最大容量
  3. 20字节保留区域
  4. 结构信息 16种slab结构,每个需要24字节,占用空间:24*16=384字节
  5. 索引信息区

           1.索引计数器数据 40-44

           2.数据最大空间指针 44-48

           3.空闲链表入口地址 48-52

           4.hash索引入口地址 (16^4)*4 = 256k

  • 数据区(混杂)
  1. 索引链表
  2. 数据链表
 类似资料: