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 Try Catch异常测试
Mar 01 PHP
创建数据库php代码 用PHP写出自己的BLOG系统
Apr 12 PHP
php操作excel文件 基于phpexcel
Jul 02 PHP
php导入大量数据到mysql性能优化技巧
Dec 29 PHP
PHP制作万年历
Jan 07 PHP
PHP导入导出Excel代码
Jul 07 PHP
php中的登陆login实例代码
Jun 20 PHP
将PHP的session数据存储到数据库中的代码实例
Jun 24 PHP
Yii2设置默认控制器的两种方法
May 19 PHP
PHP字符串中抽取子串操作实例分析
Jun 22 PHP
php使用socket调用http和smtp协议实例小结
Jul 26 PHP
php libevent 功能与使用方法详解
Mar 04 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抽象类 介绍
2012/06/13 PHP
解析关于wamp启动是80端口被占用的问题
2013/06/21 PHP
PHP加密扩展库Mcrypt安装和实例
2013/11/10 PHP
PHP工程师VIM配置分享
2015/12/15 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
基于jquery的tab切换 js原理
2010/04/01 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
2016/01/06 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
js和jquery中获取非行间样式
2017/05/05 jQuery
vue实现重置表单信息为空的方法
2018/09/29 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
python使用mysqldb连接数据库操作方法示例详解
2013/12/03 Python
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
python+Django+apache的配置方法详解
2016/06/01 Python
python实现发送邮件功能
2017/07/22 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
基于python实现音乐播放器代码实例
2020/07/01 Python
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
优秀毕业生求职信范文
2014/01/02 职场文书
贺卡寄语大全
2014/04/11 职场文书
中学生励志演讲稿
2014/04/26 职场文书
冬季施工防火方案
2014/05/17 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
2014年乡镇妇联工作总结
2014/12/02 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
导游词之南京栖霞山
2019/10/18 职场文书
css3 实现文字闪烁效果的三种方式示例代码
2021/04/25 HTML / CSS
redis哨兵常用命令和监控示例详解
2021/05/27 Redis