ThinkPHP--缓存处理

数据缓存

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}'),
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值