PHP缓存(一)缓存到硬盘

用的服务器配置较差,而且只有一台和其他东西公用的WEB服务器和一台公用的数据库服务器,有没有足够的内存装memcached,没办法只好把数据缓存在硬盘上,稍微减轻一下减轻数据库的负担。只好这样: 把一些数据缓存在硬盘上,稍微缓解一下服务器的压力。
    这是我写的一个缓存类的代码(附件中有下载),把数据以数组的格式缓存在硬盘上,稍微减轻一些服务器的压力。其实这个东西有一些配置文件性质的,以后慢慢改进吧!
<?php
/**--------------------------------------------------------*
 *     JBUF 1.0.0   Jeff Jing  All Rights reserved         *
 **--------------------------------------------------------*
 * @author:      景银振
 * @Date:        2009-10-24 18:36:24
 * @Version:     1.0.0
 * @Description: Buffering data as array into harddisk
 *   
 * */
//保留署名权,请尊重劳动成果
 
require_once("include/common.php");
error_reporting(E_ALL);
$cache_dir="cache/buffer/"; // 配置项: 缓存目录
$cache_file='main.buf';    // 配置项:缓存文件名  (其实可以考虑两个参数和起来)
class JBUF{
 public static function set($key,$value,$expire,$force=false){
  /**
   *  Description: 设置缓存
   *  参数:
   *   $key    缓存项主键
   *   $value  缓存的值
   *   $expire 有效期,以秒为单位,如果写0,则永不过期
   *   $force  是否强制写入,默认为false当缓存中有相同主键没有过期的缓存返回false 否则强制覆盖
   *
   */
  global $cache_file;
  global $cache_dir;
  @$str=getFileContent($cache_file,$cache_dir); // 获取缓存文件内容
  eval(strip_tags($str));
  if($buffer[$key] && !$force){ // 缓存存在且没有强制覆盖
   $row=$buffer[$key];
   if($row['expire']=='never' || date("Y-m-d H:i:s",strtotime($row['expire']))<strtotime(date("Y-m-d H:i:s"))){ // 如果不是永不过期且未过期
    return false;
   }
  }
  $row['data']=$value;
  $row['expire']=($expire==0)?'never':date('Y-m-d H:i:s',strtotime(date('Y-m-d H:i:s'))+$expire);
  $buffer[$key]=$row;//'$buffer='.arr2str($arr).";"
  writefile($cache_file, '$buffer='.arr2str($buffer).";",$cache_dir); //
  
  unset($buffer); //释放变量
  unset($str); // 释放变量
  return true;  
 }
 public static function get($key){ 
  /**
   *  Description: 查找缓存
   *  参数:
   *   $key    缓存项主键
   */
  global $cache_file;
  global $cache_dir;
  @$str=getFileContent($cache_file,$cache_dir);// 读取数据
  eval(strip_tags($str));
  if($buffer[$key]){   
   $row=$buffer[$key];
   if($row['expire']=='never' || date("Y-m-d H:i:s",strtotime($row['expire']))<strtotime(date("Y-m-d H:i:s"))){ // 存在且未过期返回数据
    return $row['data'];
   } else { // 已过期,清空该项并返回null
    unset($buffer[$key]);
    writefile($cache_file, '$buffer='.arr2str($buffer).";",$cache_dir);
    return null;
   }
  }else{
   return null; //不存在直接返回null
  }
 }
 public static function clear(){
  /**
   *  Description: 清除所有缓存,删除缓存文件即可
   *
   */
  global $cache_file;
  global $cache_dir;
  if(file_exists($cache_dir.$cache_file)){
   unlink($cache_dir.$cache_file);
  }
 }
}
function arr2str($arr){
 /**
  *  Description: 将数组转为字符串
  *  Date:         2009-10-24
  */
 if(is_array($arr)){
  $str="array(";
  foreach ($arr as $key=>$value){
   $str.=("'".$key."'=>".arr2str($value).",");
  }
  $str=substr($str,0,strlen($str)-1);
  $str.=")";
  return $str;
 }else{
  return "'".$arr."'";
 }
}
?>
本文出自 “ 程序员景银振的博客” 博客,请务必保留此出处 http://jeff1987.blog.51cto.com/910685/216157

你可能感兴趣的:(职场,休闲)