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


Posted in PHP onApril 15, 2010

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

思路是这样的:

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

/* 
//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 = "Array\n$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; 
    } 
}

最简单的调用方法:
include './php_kcache_class.php'; 
$pc = new php_kcache; 
$a = array('a', 'b', 'c'); 
$pc->set_cache('a', addslashes($a));

复杂的调用方法(加上缓存时间控制的)——稍后补上….to be continued…
PHP 相关文章推荐
用php过滤危险html代码的函数
Jul 22 PHP
php XPath对XML文件查找及修改实现代码
Jul 27 PHP
PHP安全性漫谈
Jun 28 PHP
php实现的简单日志写入函数
Mar 31 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
关于PHP中字符串与多进制转换函数的实例代码
Nov 03 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
PHP对象的浅复制与深复制的实例详解
Oct 26 PHP
PHP自定义错误处理的方法分析
Dec 19 PHP
php/JS实现的生成随机密码(验证码)功能示例
Jun 06 PHP
解决Laravel 不能创建 migration 的问题
Oct 09 PHP
php7性能提升的原因详解
Oct 13 PHP
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
Apr 15 #PHP
php 格式化数字的时候注意数字的范围
Apr 13 #PHP
在IIS7.0下面配置PHP 5.3.2运行环境的方法
Apr 13 #PHP
php 上传功能实例代码
Apr 13 #PHP
php array_search() 函数使用
Apr 13 #PHP
php in_array 函数使用说明与in_array需要注意的地方说明
Apr 13 #PHP
php读取javascript设置的cookies的代码
Apr 12 #PHP
You might like
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
解析PHP工厂模式的好处
2013/06/18 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
JavaScript实现简单的日历效果
2016/09/25 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
EsLint入门学习教程
2017/02/17 Javascript
JS实现图片手风琴效果
2020/04/17 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
angular6 填坑之sdk的方法
2018/12/27 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
Python获取当前时间的方法
2014/01/14 Python
Python实现SVN的目录周期性备份实例
2015/07/17 Python
python实现class对象转换成json/字典的方法
2016/03/11 Python
python实现百万答题自动百度搜索答案
2018/01/16 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
Python2.7.10以上pip更新及其他包的安装教程
2018/06/12 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
Python 等分切分数据及规则命名的实例代码
2019/08/16 Python
python对象转字典的两种实现方式示例
2019/11/07 Python
python使用布隆过滤器的实现示例
2020/08/20 Python
升职自荐信范文
2013/10/05 职场文书
电气工程及自动化专业自荐书范文
2013/12/18 职场文书
幼儿园消防演练方案
2014/02/13 职场文书
大学生职业生涯规划书参考模板
2014/03/05 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
中学生检讨书1000字
2014/10/28 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
2016年安全月活动总结
2016/04/06 职场文书
详细了解java监听器和过滤器
2021/07/09 Java/Android
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL
GoFrame框架数据校验之校验结果Error接口对象
2022/06/21 Golang