php adodb使用缓存查询
在一个动态页面中,如果其中的一个查询指令很少改变且频繁被执行,我们则可以使用ADODB的缓存功能,可以将查询指令的结果缓存成静态文件,从而提高PHP脚本的性能。
当试图通过缓存来提高你的应用程序的性能之前,建议先去优化查询指令再开始本操作,这样才会起到事半功倍之效果。
ADODB最棒的功能就是提供查询缓存的功能。缓存可以大大改善应用程序的性能,尤其是网站系统,因为大部分用户都是在浏览网站,数据库完成的任务多半是查询(SELECT操作)。为了更好地理解与应用缓存查询的功能,我们来看下面的脚本例子。
<?php
include_once("libs/adodb/adodb.inc.php");
// 创建一个mysql连接实例对象
$db = NewADOConnection("mysql");
// 打开一个数据库连接
$db->Connect("localhost", "root", "root", "adodb") or die("Unable to connect!");
// 构造并执行一个查询
$query = "SELECT * FROM library";
$result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg());
// 遍历返回的记录集,显示列数据的内容 TITLE 和 AUTHOR
while (!$result->EOF) {
echo $result->fields[1] . " - " . $result->fields[2] . "\n";
$result->MoveNext();
}
// 显示取得的记录行数
echo "\n[" . $result->RecordCount() . " 行记录被返回]\n";
// 关闭数据库连接
$db->Close();
?>
这段代码使用ADODB进行一个SELECT操作。比如说,这就是您的网站,平均有每分钟5000次的点击(PV,Page View)量,那么数据库系统每小时至少要被查询3万次以上,可以想象,这对我们的MySQL数据库的负载是相当繁重的。
因此ADODB提供了缓存的功能,可以将经常查询的结果保存起来,进而降低数据库服务器的负荷,同时也向用户提供更快速的内容响应。
下面是修改上面的脚本,改为使用CacheExecute来进行缓存查询的示例:
<?php
include("libs/adodb/adodb.inc.php");
//设置缓存保存的路径,.表示当前目录
$ADODB_CACHE_DIR = '.'; //为了管理方便,实际开发环境请指向到独立的目录中,如/tmp/adodb
// 创建一个mysql连接实例对象
$db = NewADOConnection("mysql");
// 打开一个数据库连接
$db->Connect("localhost", "root", "passwd", "adodb") or die("Unable to connect!");
// 构造并执行一个查询
$query = "SELECT * FROM library";
$result = $db->CacheExecute(300,$query) or die("Error in query: $query. " . $db->ErrorMsg());
// 遍历返回的记录集,显示列数据的内容 TITLE 和 AUTHOR
while (!$result->EOF) {
echo $result->fields[1] . " - " . $result->fields[2] . "\n";
$result->MoveNext();
}
// 取得和显示返回的记录行数
echo "\n[" . $result->RecordCount() . " 行记录被返回]\n";
// 关闭数据库连接
$db->Close();
?>
CacheExecute()方法的第一个参数是缓存文件(缓存文件被命名为adodb_*.cache)将被保留的时间,以秒计时;第二个参数是SQL声明。第一个参数是可选择的,若没有限定时间,默认值是3600秒,也就是1个小时。
值得一提的是,使用CacheExcute()方法时,需要将php.ini中的参数magic_quotes_runtime设为0。
也可以根据需要,在程序运行时动态修改它的值:
set_magic_quotes_runtime(0);
注意:将上述代码放到调用数据库的指令之前,我们还可以在任何时候,通过调用CacheFlush()来清除过时的缓存。