ThinkPHP框架总结之缓存及使用
/* 数据缓存设置 */
'DATA_CACHE_TIME' => 0, // 数据缓存有效期 0表示永久缓存
'DATA_CACHE_COMPRESS' =>false,// 数据缓存是否压缩缓存
'DATA_CACHE_CHECK' => false, //数据缓存是否校验缓存
'DATA_CACHE_PREFIX' => '', // 缓存前缀
'DATA_CACHE_TYPE' => '', // 数据缓存类型,支持:File|Db|Apc|Memcache|Shmop|Sqlite|Xcache|Apachenote|Eaccelerator
'DATA_CACHE_PATH' => TEMP_PATH,//缓存路径设置 (仅对File方式缓存有效)
'DATA_CACHE_KEY' => '_think_', // 缓存文件KEY (仅对File方式缓存有效)
'DATA_CACHE_SUBDIR' => false, //使用子目录缓存 (自动根据缓存标识的哈希创建子目录)
// 缓存初始化默认为File(未设定的参数以预定义为准,缓存单位为秒)
S(array(
'type'=>'File',
'prefix'=>'_cache_file',
'expire'=>30
// 缓存设置内容为‘Hello Cache!’时长为默认60秒
// 缓存读取
// 删除缓存(删除缓存文件)
$cacheValue= S('cache_key',null);
'DATA_CACHE_PATH' => TEMP_PATH,//缓存路径设置 (仅对File方式缓存有效),该目录为当前项目的Runtime下的Temp目录下,文件名规则:prefix+加密串。
S(array('type'=>'File','prefix'=>'_cache_file','expire'=>30));
无键值时:
$wheres = array();
$wheres['account'] = $account;
$User= M('UserInfo');
// 无键值时缓存方式为file缓存时长为60秒不能指定清除这个缓存文件也不能获得缓存内容
$data= $User->where($wheres)->cache(true,60,'file')->find();
$wheres = array();
$wheres['account'] = $account;
$User= M('UserInfo');
// 有键值时缓存方式为file缓存时长为60秒可以指定清除这个缓存文件也可以获得缓存内容
// 缓存读取
// 缓存清空
// 静态缓存配置参数
'HTML_CACHE_ON' => true, // 开启静态缓存
'HTML_CACHE_TIME' => 60, //全局静态缓存有效期(秒)
'HTML_FILE_SUFFIX' => '.shtml', // 设置静态缓存文件后缀
'HTML_CACHE_RULES' => array( //定义静态缓存规则
// 定义格式1数组方式
'静态地址' => array('静态规则','有效期','附加规则'),
// 定义格式2字符串方式
'静态地址' => '静态规则'
静态地址格式有多种定义,具体如下:
1)定义全局的操作静态规则,例如定义所有的read操作的静态规则为:
'read'=>array('{id}',60)
其中,{id}表示取$_GET['id']为静态缓存文件名,第二个参数表示缓存60秒。
2)定义全局的控制器静态规则,例如定义所有的User控制器的静态规则为:
'user:'=>array('User/{:action}_{id}','600')
其中,{:action}表示当前的操作名称
3)定义某个控制器的操作的静态规则,例如,我们需要定义Blog控制器的read操作进行静态缓存
'blog:read'=>array('{id}',0)
4)定义全局的静态缓存规则,这个属于特殊情况下的使用,任何模块的操作都适用,例如,
'*'=>array('{$_SERVER.REQUEST_URI|md5}')
1)使用系统变量
包括 _GET、_REQUEST、_SERVER、_SESSION、_COOKIE格式:
{$_×××|function}
例如:
{$_GET.name}
{$_SERVER.REQUEST_URI|md5}
2)使用框架特定的变量
{:module}、{:controller}和{:action}分别表示当前模块名、控制器名和操作名。
例如:
{:module}/{:controller}_{:action}
3)使用_GET变量
{var|function}也就是说{id}其实等效于{$_GET.id}
4)使用函数
{|function} 例如:
{|time}
5)支持混合定义
例如,我们可以定义一个静态规则为:
'{id},{name|md5}'
在{}之外的字符作为字符串对待,如果包含有"/",会自动创建目录。
例如,定义下面的静态规则:
{:module}/{:action}_{id}
// 静态缓存配置参数
'HTML_CACHE_ON' => true, // 开启静态缓存
'HTML_CACHE_TIME' => 60, //全局静态缓存有效期(秒)
'HTML_FILE_SUFFIX' => '.shtml', // 设置静态缓存文件后缀
'HTML_CACHE_RULES' => array( //定义静态缓存规则
// 静态地址:控制器cache下的cacheforstatic的缓存规则
// 静态规则:{:module}/{:action}_{$_GET.name}
// 有效时间:30秒
// 附加规则:附加后的静态规则md5('{:module}/{:action}_{_|time}')
前端页面:
DOCTYPE html>
<html>
<head>
<metacharset="UTF-8">
<scriptsrc="__PUBLIC__/htmls/js/jquery-1.8.3.min.js">script>
<linkrel="stylesheet"href="__PUBLIC__/htmls/css/company/company.css"/>
head>
<bodystyle="background-color:#9999;">
<div>Hello static cache!div>
body>
// 静态缓存
public function cacheForStatic() {
$this->display('static');
// 快速缓存(存储类型为默认File方式)
public function cacheForFast() {
header('Content-Type:text/html;charset=utf-8');
$data= 'Cache Data ForFast!';
// 缓存设置(默认位置DATA_PATH)
F('cache',$data);
// 缓存读取
echo F('cache').'';
// 缓存设置(指定位置TEMP_PATH)
F('cache_tmp',$data,TEMP_PATH);
// 缓存读取
echo F('cache_tmp').'';
// 缓存自动创建子目录(默认DATA_PATH下创建)
F('Cache/cache_tmp_dir',$data);
// 缓存读取
echo F('Cache/cache_tmp_dir');
// 快速缓存(存储类型为默认File方式)
public function cacheForFast() {
header('Content-Type:text/html;charset=utf-8');
$data= 'Cache Data ForFast!';
// 缓存设置(默认位置DATA_PATH)
F('cache',$data.'1');
// 缓存读取
echo F('cache').'';
// 缓存设置(指定位置TEMP_PATH)
F('cache_tmp',$data.'2',TEMP_PATH);
// 缓存读取
echo F('cache_tmp').'';
// 缓存自动创建子目录(默认DATA_PATH下创建)
//F('Cache/cache_tmp_dir',$data.'3');
// 缓存读取
//echo F('Cache/cache_tmp_dir');
// 缓存删除(删除默认DATA_PATH下缓存)
F('Cache/cache_tmp_dir',NULL);
echo F('Cache/cache_tmp_dir');
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
