缓存所有查询

时间:2013-07-01 20:14:26

标签: php mysql

我是一个PHP爱好者,我正在研究一个新的文章系统。我做了一个类来处理简单的数据库操作。每次启动类时,此类都会检索表名和自动增量字段,以创建与数据库表匹配的对象。因此,当我在我的文章系统上工作时,我检查了我的数据库类生成的查询日志,我在一个简单的页面上发现了35个查询。

现在我做了一个小缓存类:

<?php

namespace library;

class cache {

    private static $instance;

    public $arDBFields = array ();

    public $arAIFields = array ();

    public $arQueryResults = array ();

    public static function get() {
        if(! self::$instance){
            self::$instance = new self ();
        }
        return self::$instance;
    }

    public function setDBFields($name, $value) {
        $this->arDBFields [$name] [] = $value;
    }

    public function getDBFields($name) {
        if(! empty ( $this->arDBFields [$name] ))
            return $this->arDBFields [$name];

        return array ();
    }

    public function setAIField($name, $value) {
        $this->arAIFields [$name] = $value;
    }

    public function getAIField($name) {
        if(! empty ( $this->arAIFields [$name] ))
            return $this->arAIFields [$name];

        return array ();
    }

    public function setQueryResult($name, $cacheshit) {
        $this->arQueryResults [$name] = $cacheshit;
    }

    public function getQueryResult($name) {

        if(! empty ( $this->arQueryResults [$name] ))
            return $this->arQueryResults [$name];

        return array ();
    }

}

&GT;

在我的mysql类中我添加了这个:

if(!empty($cachedValue)){
            $this->query = $cachedValue ;
        }
        else {
            $this->query = mysql_query ($sql , $this->connection);
            cache::get()->setQueryResult($sql, $this->query);
        }

如果它没有空的$ cachedvalue

,它也会跳过写入查询日志数组

现在,我的查询日志显示了此页面的6个查询,这是必须用于页面的最低限度。

我的问题是,这样做是好还是有更好的方法来减少查询?

2 个答案:

答案 0 :(得分:0)

缓存是一件好事,特别是如果您的内容不经常更改。事实上,许多PHP框架都会为你做这件事。

答案 1 :(得分:0)

如果您正在使用Windows / IIS环境,那么您可以安装WinCache并利用用户缓存选项将频繁访问的数据存储在内存中,因此可以获得多个页面请求的好处(取决于您设置的时间长度) TTL)。安装WinCache非常简单,并且使代码运行得更快,因为它的基本功能是缓存OPCode,因此PHP不必为每个请求创建OPCode。

WinCache是​​我的经验,但我确信大多数Web服务器应用程序(Apache,IIS等)都有类似的东西(APC在Apache上很流行)。

http://www.iis.net/downloads/microsoft/wincache-extension

直接回答你的问题。编写自己的缓存代码有助于更好地理解PHP,我认为这是一件好事。但是,为了获得最大收益,您应该集成一个现有的缓存机制并围绕它编写代码。