加蓝网 . 新闻 . 论坛 . 业务 

Jolr's Blog

曾几何生命薄如蝉翼,又曾几何时梦无牵挂...


iCache类


在加蓝网首页改版中为了管理方便我将加蓝网首页的许多信息都放到数据里了,如友情链接、幻灯图片、滚动公告等,这样做方面添加、删除管理,但这些数据都是很长时间都不会改变的,包括显示的文章或新闻,它们都完全跟我的勤劳度挂钩了,嘻嘻!如果每次去从数据库中读取这些信息肯定会影响程序速度的,也不利于降低服务器的负载,于是想到了将这些数据序列化后统一存在数据库中,这样加载页面时可以一个SQL查询将所有数据读出来!

下面是我为实现这个功能写的一个类。

<?php

class iCache
{
        var $caches;
        var $cachetable   = 'site_cache';
        var $cachename    = 'cache';
        var $cachetime    = 'dateline';
        var $cachecontent = 'content';
        var $functionfile = 'function.cache.php';

        function iCache($caches,$cachetable='',$cachename='',$cachecontent='',$cachetime='') {
                global $db;
                if ($cachetable!="" && $cachetable!=null) {
                        $this->cachetable = $cachetable;
                }
                if ($cachename!="" && $cachename!=null) {
                        $this->cachename = $cachename;
                }
                if ($cachetime!="" && $cachetime!=null) {
                        $this->cachetime = $cachetime;
                }
                if ($cachecontent!="" && $cachecontent!=null) {
                        $this->cachecontent = $cachecontent;
                }
                $query = $db->query("SELECT {$this->cachename},{$this->cachecontent},{$this->cachetime} FROM {$this->cachetable} WHERE $this->cachename IN ({$caches})");
                while($rs = $db->fields($query)) {
                        $this->caches[$rs[$this->cachename]] = $rs;
                }
        }

        function setFunctionFile($functionfile) {
                $this->functionfile = $functionfile;
        }

        function cache($cachename,$cachetime) {
                global $timestamp;
                if ($this->caches[$cachename] 
                        && $this->caches[$cachename][$this->cachecontent]!="" 
                        && ($timestamp - $this->caches[$cachename][$this->cachetime])<$cachetime) {
                        return unserialize($this->caches[$cachename][$this->cachecontent]);
                } else {
                        return $this->reCache($cachename);
                }
        }

        function reCache($cachename) {
                global $db,$timestamp;
                require_once($this->functionfile);
                if (@function_exists($cachename)) {
                        if ($cachecontent = $cachename()) {
                                $db->query("REPLACE INTO {$this->cachetable} ({$this->cachename},{$this->cachecontent},{$this->cachetime}) VALUES ('$cachename','".addslashes(serialize($cachecontent))."','$timestamp')");
                                return $cachecontent;
                        } else {
                                return "{$cachename}() cat't cached content";
                        }
                } else {
                        return "Can't load cache function {$cachename}()";
                }
        }
}

该日志的引用地址:

发表评论:

E-mail



日历

网站目录

搜索

Powered By O-Blog | Template Modified By FengSe

Copyright 2004-2006 PhpBlog.Cn.All Rights Reserved.