散列文件缓存类(cls_filecahce.php)

Source:phpbone.com  Author:IT柏拉图
2013-11-25

    cls_filecahce 是居于散列格式存储数据的key-value类,有点类似memcachedb,当然它是纯php开发,并且针对非分布式应用最理想的缓存程序,与传统的直接保存小文件那种缓存形式比,可以大大的减少缓存文件清理的头痛工作,但又有足够高的读写效率。
    下面以一个性能测试示例来说明cls_filecahce的基本使用方式:

  1. //指定缓存文件名 
  2. $cfc = new cls_filecache( PATH_DATA.'/cache/test_cache' ); 
  3.  
  4. $start_time = microtime(true); 
  5.  
  6. echo "测试写入 50 万条缓存数据<br />"
  7. for$i=0; $i < 500000; $i++ ) { 
  8.     $cfc->set('test_'.$i'test_'.$i); 
  9.  
  10. $start_time2 = microtime(true); 
  11. $t = sprintf("%0.4f"$start_time2 - $start_time ); 
  12. echo "写入 50 万条用时 {$t} 秒<br/>"
  13.  
  14. //随机读取5万条 
  15. for$i=0; $i < 50000; $i++ ) { 
  16.     $n = mt_rand(0, 500000); 
  17.     $cfc->get('test_'.$n); 
  18.  
  19. $start_time3 = microtime(true); 
  20. $t = sprintf("%0.4f"$start_time3 - $start_time2 ); 
  21.  
  22. echo "随机读取 5 万条用时 {$t} 秒<br/>"
  23.  
  24. $cfc->close(); 

    在普通SATA硬盘的奔腾E5300的PC机上测试上面结果分别是用时:写入 50 万条用时 50.4375 秒,随机读取 5 万条用时 2.7812 秒,单纯看读取时间,这个数字已经比memcache和redis更优秀,所以作为单服务器应用使用的缓存,已经足够。

 cls_filecahce成员函数列表:

1、public function __construct( $cache_file='filecache_data', $is_single = false )
    构造函数,指定缓存文件的名称(要使用绝对路径,通常是PATH_DATA.'/cache/cache_name'),系统默认的cache类保存的文件是PATH_DATA.'/cache/filecache_data',对应的缓存文件名是:PATH_DATA.'/cache/filecache_data.php'。
    虽然说缓存文件顶部包含有<?php exit(); ?>代码,但对于有服务器控制权限的用户,仍然建议把data目录设置为不允许执行PHP,那样更安全可靠。

2、public function clear( )
    清除所有缓存(实际相当于重建缓存文件)

3、public function delete( $key )
(同名函数 public function del() )
    删除指定key的缓存(居于性能考虑,删除一个缓存时,实际只是在这缓存上做一个已经删除的标识,不会真正删除数据)

4、public function get( $key )
    读取一个缓存,如果要确定缓存值不存在,应该用 ===false进行对比,即
    $value = $cfc->get( $key );
    if( $value===false ) {   缓存不存在或已过期; }


5、public function set( $key, $value, $compress=0, $exptime=0, $block_size=1 )
    设置一个缓存
参数列表:
$key                   缓存key
$value                缓存值(字符串、数组等都允许)
$compress=0     是否压缩(此项仅为了兼容mem接口,实际并无效)
$exptime=0        过期时间,为0是表示永不过期
$block_size=0     此项已经作废

6、public function close()
    关闭缓存文件句柄
    如果自行使用这个缓存类,执行完之后,应该进行close操作,如果用系统的cache类,因为在handler_php_shutdown里已经检测并处理,因此并不需自己去理会,此外函数的析构函数也会进行这个操作。
 

分享到: