你现在的位置:首页 > PHP网站建设知识库 > Discuz > 正文

Discuz x2.0开发之使用缓存

在做discuz网站开发时,如何创建缓存呢?

假设discuz数据库中已经有下面这个数据表:pre_xxjob_cardcategory,保存的是充值卡信息

\

 

我们切换到discuz目录source/function/cache/下创建cache_plugincard.php,代码如下:

<?php  

if(!defined('IN_DISCUZ')){  

    exit("Access Denied");  

}  

function build_cache_plugincard(){  

    $data=array();  

    $query=DB::query("SELECT name FROM ".DB::table('xxjob_cardcategory')); //从数据库检索数据  

    while($row=DB::fetch($query)){  

        $data[]=$row['name'];  //将数据存放到数据中  

    }  

    save_syscache('plugincard',$data);   //通过save_syscache()将数组保存到pre_common_syscache表中  

}  

?>  

保存后我们到管理后台更新一下缓存,然后查看pre_common_syscache表中会多出一条数据,表明已经创建成功

\

如何使用?

我们在discuz根目录下创建一个单页test.php

<?php  

  

require_once './source/class/class_core.php';  

require_once './source/function/function_home.php';  

$discuz = & discuz_core::instance();  

$discuz->cachelist=array("plugincard");//加载指定缓存,内部会自动调用loadcache();  

$discuz->init();  

print_r($_G['cache']['plugincard']) ;  

  

?>  


运行显示结果是:

 

\

当然我们也可以自己手动加载缓存

 

loadcache('plugincard');  

print_r($_G['cache']['plugincard'];  

 

如何自己创建缓存?不依靠$discuz->init()初始化.

如果不想让系统自动初始化缓存,则可以自己单独用save_syscache()和loadcache();

//从数据库获取数据  

$query=DB::query('xxxxxx');  

//数据存放到数组里  

$arr=array();  

while(DB::fetch($query){  

      $arr=.....;  

}  

//保存到数据表中  

save_syscache('plugincard',$arr);  

  

.......  

.......  

  

//使用时这样  

loadcache('plugincard');  

//然后就可以在$_G全局变量使用  

print_r($_G['cache']['plugincard']);  


 

如何更新缓存?

在管理后台点"更新缓存"会更新全部系统缓存,当然我们也可以自己更新,使用 updatecache($name);

当我们在数据库中新增或更新数据之后,可以调用该函数更新缓存表里的数据