PHP中常见的缓存技术实例分析
《PHP实例:PHP中常见的缓存技术实例分析》要点: 本文实例分析了PHP中常见的缓存技术.分享给大家供大家参考.具体如下:PHP教程 JBLOG在开发的过程中,对性能的优化做了不少工作.为了尽量减少不必要的数据库查询,我对一些数据进行了缓存和静态化处理.PHP教程 缓存的原理:把一些经常要用到但又很少改动的数据以数组或其它形式存储到一个独立的PHP文件中,然后在需要用到的时候包含进来.PHP教程 缓存的优点:能够大大减少数据库的查询次数,减轻数据库的压力,提高程序的执行效率.PHP教程 JBLOG缓存的数据有:系统设置、博客分类、侧栏最新日志、最新评论、博客统计、日志归档、友情链接、标签等.通过缓存这些数据,执行一次页面数据库的查询次数从十几次减少到3次.PHP教程 JBLOG中与缓存相关的函数保存在include目录下的cache.func.php里,主要函数:PHP教程 //刷新缓存 function recache($cachestr = '') { if (!$cachestr) { $cachelist = array('config','class','archive','newcomment','newpost','link','tag','statistic','topblog'); } else { $cachelist = explode(',',$cachestr); foreach ($cachelist as $cache) { $cachename = $cache.'_recache'; if (function_exists($cachename)) { $cachename(); } } } } recache()函数用来刷新缓存,每一个缓存以独立的函数存在,刷新缓存时仅需执行一次相应的函数即可.PHP教程 //将字符串写进文件 function writeToFile($cachename,$content = '') { $allowcache = $cachelist = array('config','topblog'); if (in_array($cachename,$allowcache)) { $cache_dir = JBLOG_ROOT.'cache_data/'; $cache_file_name = $cache_dir.'cache_'.$cachename.'.php'; if (!is_dir($cache_dir)) { @mkdir($cache_dir,0777); } if ($fp = @fopen($cache_file_name,'wb')) { $content = "<?phprn//该文件是系统自动生成的缓存文件,请勿修改rn//创建时间:".date('Y-m-d H:i:s',time())."rnrnif (!defined('IN_JBLOG')) {exit('Access Denied!');}rnrn".$content."rnrn?>"; @fwrite($fp,$content); @fclose(); @chmod($cache_file_name,0777); } else { echo '缓存文件<b>'.$cache_dir.$cache_file_name.'</b>创建失败!<br />'; } } else { die('缓存名称<b>'.$cachename.'</b>不在系统允许的范围内!'); } } writeToFile() 函数用于将数据写入到缓存目录下以cache_缓存名称.php命名的文件中. //缓存博客分类 function class_recache() { global $db,$tablepre; $content = ''; $sql = "SELECT id,classname,description,orderid,arcnum FROM `{$tablepre}class` ORDER BY orderid"; $result = $db->query($sql); while ($row = $db->fetch_array($result)) { $content .= "tarray(rn"; $content .= "t'id'=>'".addslashes($row['id'])."',rn"; $content .= "t'classname'=>'".addslashes($row['classname'])."',rn"; $content .= "t'description'=>'".addslashes($row['description'])."',rn"; $content .= "t'orderid'=>'".addslashes($row['orderid'])."',rn"; $content .= "t'arcnum'=>'".addslashes($row['arcnum'])."',rn"; $content .= "t),rn"; } $content = substr($content,strrpos($content,')); $content = "$class_cache = array(rn{$content}rn);"; writeToFile('class',$content); } class_recache()函数从数据库取出数据,然后构造一个数组,以分类ID作为数组的索引,类别的信息作为对应的值,方便数据的拜访. 所有缓存数据统一在include目录下的common.inc.php引入,代码如下:PHP教程 //加载系统设置信息,文件不存在则重建缓存 if ([email=!@include(JBLOG_ROOT.]!@include(JBLOG_ROOT.'cache_data/cache_config.php'[/email])) { require_once(JBLOG_ROOT.'include/cache.func.php'); recache('config'); exit('成功创建系统配置信息缓存,请刷新页面!'); } //加载缓存,缓存文件不存在则重建缓存 $cachestr = ''; $cachelist = array('class','topblog'); foreach ($cachelist as $cachename) { $cachestr .= (@include(JBLOG_ROOT.'cache_data/cache_'.$cachename.'.php')) ? '' : $cachename.','; } $cachestr = substr($cachestr,strrpos($cachestr,')); if ($cachestr) { require_once(JBLOG_ROOT.'include/cache.func.php'); recache($cachestr); exit('所有缓存重建完成,请刷新页面!'); } unset($cachelist,$cachename,$cachestr); 先加载配置信息是因为,在创建其它缓存文件的时候,经常要用到系统的设置信息,如系统设置中有一个选项可以让用户自定义最新日志的数量,在缓存最新日志的时候就会用到该变量,所以必须先确保配置信息成功缓存后,再缓存其它项目.PHP教程 希望本文所述对大家的php程序设计有所赞助.PHP教程 编程之家培训学院每天发布《PHP实例:PHP中常见的缓存技术实例分析》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |