加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php cache类代码(php数据缓存类)

发布时间:2020-05-24 21:58:39 所属栏目:PHP 来源:互联网
导读:php的执行效率很高,速度很快,但是连接数据库、查询数据库等还是比较耗时的。

如果访问量大的话会给数据库造成很大的负担,所以对于变化不经常的内容要做好php 数据cache(缓存)是十分必要的,我做了一个简单的php“文件缓存”的类,希望对大家有所帮助。

思路是这样的:

对于一般的变量,把该变量变成php语言的格式,写到文件中,用时只要include这个文件就相当于加载了cache了;
对于array型的变量,把array转化为php语言定义array的字符串,写到文件中,用时也只要include就相当于加载了cache了;
缓存cache时间上的控制,通过获取缓存文件的创建时间和现在的时间进行对比,如果没有到更新时间,直接读取缓存,如果到了更新时间,查询数据库,返回数据,再更新缓存。(尚未实现)

下面是我的php-kcache类(php_kcache_class.php):


注:如果是缓存字符串,请把转义字符多写一个'',即”n”要写成”n”。
<div class="codetitle"><a style="CURSOR: pointer" data="30834" class="copybut" id="copybut30834" onclick="doCopy('code30834')"> 代码如下:<div class="codebody" id="code30834">
/
//php-kcache class v_0.1
//Author: kangzj
//Email : kangzj@mail.bnu.edu.cn
//Blog : http://kangzj.net.ru
//作者不保证本程序没有bug,对于使用本程序
//而引起的任何问题不担负任何责任。
/
class php_kcache {
//相对或者绝对目录,末尾不要加 '/'
var $cache_dir = './cache';
var $cache_extension = '.cache.php'; function set_cache($name,$value){
$pre = "< ?n//Cache Created at: ".date('Y-m-d H:i:s')."n";
if(!is_array($value)){
$value = $value;
$str = "$$name = '$value';";
}else{
$str = "$$name = " . $this->arrayeval($value) . ';';
}
$end = "n?>";
echo $cache = $pre . $str . $end;
$cache_file = $this->cache_dir . '/' . $name . $this->cache_extension; if($fp = @fopen($cache_file,'wb')) {
fwrite($fp,$cache);
fclose($fp);
return true;
} else {
echo $cache_file;
exit('Can not write to cache files,please check cache directory ');
return false;
}
} //将array变成字符串,来自discuz!
function arrayeval($array,$level = 0) { if(!is_array($array)) {
return "'".$array."'";
} $space = '';
for($i = 0; $i < = $level; $i++) {
$space .= "t";
}
$evaluate = "Arrayn$space(n";
$comma = $space;
if(is_array($array)) {
foreach($array as $key => $val) {
$key = is_string($key) ? '''.addcslashes($key,''').''' : $key;
$val = !is_array($val) && (!preg_match("/^-?[1-9]d*$/",$val) || strlen($val) > 12) ? '''.addcslashes($val,''').''' : $val;
if(is_array($val)) {
$evaluate .= "$comma$key => ".arrayeval($val,$level + 1);
} else {
$evaluate .= "$comma$key => $val";
}
$comma = ",n$space";
}
}
$evaluate .= "n$space)";
return $evaluate;
}
}

最简单的调用方法:

<div class="codetitle"><a style="CURSOR: pointer" data="22548" class="copybut" id="copybut22548" onclick="doCopy('code22548')"> 代码如下:<div class="codebody" id="code22548">
include './php_kcache_class.php';
$pc = new php_kcache;
$a = array('a','b','c');
$pc->set_cache('a',addslashes($a));

复杂的调用方法(加上缓存时间控制的)——稍后补上….to be continued…

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读