数据缓存
TP中有专门处理缓存的类:Cache.class.php
。我们使用的时候不需要直接声明它,直接使用一个大S()
方法即可。
系统目前已经支持的缓存类型包括:Apachenote、Apc、Db、Eaccelerator、File、Memcache、Redis、Shmop、Sqlite、Wincache、Xcache。如果不初始化。会默认使用File文件缓存。
初始化的方法为:
S(array(
'type'=>'memcache',
'host'=>'127.0.0.1',
'port'=>'11211',
'prefix'=>'think',
'expire'=>60
));
PS:如果不初始化,将使用默认配置,即:
C()方法会输出类型
type的默认设置为:C('DATA_CACHE_TYPE'); //File
prefix的默认设置为:C('DATA_CACHE_PREFIX'); //无
expire的默认设置为:C('DATA_CACHE_TIME'); //0
其他参数,如果没有设置,将没有值。
//设置缓存
S('list',$list,30);
//读取缓存是否存在,不存在则设置
if(!$list = S('list')){
S('list',$list,30);
}
例如,当前有控制器UserController.class.php:
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{
public function index(){
if(!$list=S('list')){
$user = D('User');
$list = $user->select();
S('list',$list,10); //如果没有缓存,则创建缓存并保存10秒钟
}
$this->assign('list',$list);
$this->display();
}
}
前提是一定要在View视图里有User文件夹下的test.html模板:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<table border="1">
<tr><th>id</th><th>user</th><th>email</th></tr>
<foreach name="list" item="obj">
<tr><td>{$obj.id}</td><td>{$obj.user}</td><td>{$obj.email}</td></tr>
</foreach>
</table>
</body>
</html>
PS:<foreach>
标签是TP内置标签,类似于volist标签,可以通过item输出索引。
删除缓存:
S('list',null);
快速缓存
如果不想设置有效期存储,可以 使用大F()
方法的快速缓存。
//使用F()方法快速缓存
public function index(){
if(!$list = F('list')){
$user = D('User');
$list=$user->select();
F('list',$list,TEMP_PATH);
}
$this->assgin('list',$list);
$this->display();
}
删除缓存
F('list',null);
查询缓存
对于及时性要求不高的数据查询,我们可以使用查询缓存功能来提供性能。
//查询SQL后缓存
$list = $user->cache(true)->select();
//指定缓存的key会更加高效(也就是自定义缓存名称)
$list = $user->cache('cache_user')->select();
//可以设定过期时间和其他缓存方式
$list = $user->cache('cache_user',10,'xcache')->select();
PS:如果没有按照xcache缓存,则会报错,而过期时间,必须关闭调试模式方可有效。
//获取缓存
var_dump(S('cache_user'));
//删除缓存
S('cache_user',null);
除了查询缓存之外,对于SQL查询语句本身也有解析缓存,就是把SQL语句给缓存下来,下次执行就不需要再解析了。
//SQL解析缓存,在config.php里进行配置
'DB_SQL_BUILD_CACHE'=>true,
静态缓存
静态缓存,就是第一次访问PHP时生成一个纯静态文件,当第二次访问时,就直接访问这个静态文件,特别适合类似于CMS系统这种页面状态变化较少的程序。
//开启静态缓存
'HTML_CACHE_ON'=>true,
//全局缓存时间60秒
'HTML_CACHE_TIME'=>60,
//缓存的后缀
'HTML_FILE_SUFFIX'=>'.html',
//缓存规则
'HTML_CACHE_RULES'=>array(
//控制器:方法 //模块_控制器_方法_ID,局部60秒
'User:index'=>array('{:module}_{:controller}_{:action}_{id}',60),
),
除了上面的缓存规则,还有其他的缓存规则可以选择:
//方法名
'index'=>array('{id}',60),
//控制器: //User目录下的方法_ID
'User:'=>array('User/{:action}_{id}',60),
//控制器名:方法名
'User_index'=>array('{id}',60),
//将当前地址加密作为文件名
'*'=>array('{$_SERVER.REQUEST_URI|MD5}'),