我是一个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个查询,这是必须用于页面的最低限度。
我的问题是,这样做是好还是有更好的方法来减少查询?
答案 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,我认为这是一件好事。但是,为了获得最大收益,您应该集成一个现有的缓存机制并围绕它编写代码。