码迷,mamicode.com
首页 > 其他好文 > 详细

缓存处理

时间:2015-07-04 22:15:19      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

一. 数据缓存
在 ThinkPHP 中,有一个专门处理缓存的类:Cache.class.php。而我们使用的时候,
并不需要直接声明它,直接使用一个大 S()方法即可。
系统目前已经支持的缓存类型包括:Apachenote、Apc、Db、Eaccelerator、File、
Memcache、Redis、Shmop、Sqlite、Wincache 和 Xcache。如果不初始化,会默认使用
File 文件缓存。

初始化的方法为:

1 S( array(
2 ‘type‘=>‘memcache‘,
3 ‘host‘=>‘127.0.0.1‘,
4 ‘port‘=>‘11211‘,
5 ‘prefix‘=>‘think‘,
6 ‘expire‘=>60
7 ));

PS:如果不初始化的化,将使用默认配置使用。
type 的默认设置为: C(‘DATA_CACHE_TYPE‘);  //File
prefix 的默认设置为: C(‘DATA_CACHE_PREFIX‘);  //无
expire 的默认设置为: C(‘DATA_CACHE_TIME‘);  //0
其他参数,如果没设置,将没有值。

 

在 WeiBo/Home/Controller/UserController.class.php 中的代码为:

 1 namespace Home\Controller;
 2 use Think\Controller;
 3 
 4 class UserController extends Controller {
 5     public function index()  {
 6         if(!$list=S(‘list‘))
 7         {
 8         $user = D(‘User‘);
 9         $list = $user->select();
10         S(‘list‘,$list,10);
11        }
12         $this->assign(‘list‘,$list);
13         $this->display();
14     }
15  }

 S(‘list‘,$list,10); 就是将数据库中获得的数组 $list 的数据换存在 S(‘list‘) 中,10秒之后进行更新

 if(!$list=S(‘list‘)) 是判断当获得的数组是否缓存在 S(‘list‘) 中,不在的话就获取数据在进行缓存

 

比如该代码进行第一次获取后台数据库数据时会有SQL语句进行获取,之后在10秒以内,再刷新的话,则不会在对数据库进行查询了。

1 //删除缓存
2 S(‘list‘,  null);

 

二. 快速缓存
如果不想设置有效期存储,可以使用大 F()方法的快速缓存。

 1 //使用F()方法快速缓存
 2 public  function index() {
 3 if (!$list = F(‘list‘)) {
 4    $user = D(‘User‘);
 5    $list = $user->select();
 6    F(‘list‘, $list, TEMP_PATH);
 7   }
 8   $this->assign(‘list‘, $list);
 9   $this->display();
10 }

其中 F(‘list‘, $list, TEMP_PATH); 中的 TEMP_PATH 是将路径设为

技术分享

 

默认是在

技术分享

 

1 //删除缓存
2 F(‘list‘,  null);

 

三.查询缓存

对于及时性要求不高的数据查询,我们可以使用查询缓存功能来提高性能。

1 //查询SQL后缓存
2 $list = $user->cache( true)->select();

在 WeiBo/Home/Controller/UserController.class.php 中代码样式为:

1 public  function index() {    
2         $user = D(‘User‘);
3         $list = $user->cache(true)->select();
4         $this->assign(‘list‘, $list);
5         $this->display();
6     }
1 //指定缓存的Key会更加高效
2 $list = $user->cache(‘cache_user‘)->select();
1 //可以设定过期时间和其他缓存方式
2 $list = $user->cache(‘cache_user‘, 10, ‘xcache‘)->select();

PS:如果没有安装 xcache 缓存,则会报错。而过期时间,必须关闭调试模式方可有效。

这里的缓存方式可以设置为:

 Apachenote、Apc、Db、Eaccelerator、File、 Memcache、Redis、Shmop、Sqlite、Wincache 和 Xcache 

中任何一种。

1 //获取缓存
2 var_dump(S(‘cache_user‘));
1 //删除缓存
2 S(‘cache_user‘,  null);

除了查询缓存之外,对于 SQL 查询语句本身也有解析缓存,就是把 SQL 语句给缓存下
来,下次执行就不需要再解析了。当然,如果使用了查询缓存本身,由于已经将内容缓存,
所以解析缓存基本上用的较少。

1 //SQL解析缓存
2 ‘DB_SQL_BUILD_CACHE‘ =>  true,

 

四. 静态缓存
所谓静态缓存,就是第一次访问 PHP 时生成一个纯静态文件。当第二次访问时,就直
接访问这个静态文件。特别适合类似于 CMS 系统这种页面状态变化较少的程序。

在 WeiBo/Common/Conf/config.php 中进行配置:

1 //开启静态缓存
2 ‘HTML_CACHE_ON‘=> true,
1 //全局缓存时间60秒
2 ‘HTML_CACHE_TIME‘=>60,
1 //缓存的后缀
2 ‘HTML_FILE_SUFFIX‘=>‘.html‘,
//缓存规则
‘HTML_CACHE_RULES‘=> array(
//控制器:方法 //模块_控制器_方法_ID,局部60秒
‘User:index‘=> array(‘{:module}_{:controller}_{:action}_{id}‘,60),
),

配置好上述四条后,在WeiBo目录下会多出一个Html文件,这里存放的就是缓存文件

这时的url为 http://localhost/demo39/index.php/User/index/id/5 最后的 id/5 是平添上去的,没有任何意义,

这时在Html文件夹下生成一个名为 Home_User_index_5.html 的缓存文件

是按照配置中 {:module}_{:controller}_{:action}_{id} 的形式生成的,

如果该配置中的_全部改成/,则生成的形式为:

技术分享

这时的缓存文件为5.html

 

除了上面的缓存规则,还有其他的缓存规格选择:

1 //方法名
2 ‘index‘=> array(‘{id}‘, 60),
1 //控制器: //User目录下的 方法_ID
2 ‘User:‘=> array(‘User/{:action}_{id}‘, 60),
1 //控制器名:方法名
2 ‘User:index‘=> array(‘{id}‘, 60),
1 //将当前地址加密作为文件名
2 ‘*‘=> array(‘{$_SERVER.REQUEST_URI|md5}‘),

 

缓存处理

标签:

原文地址:http://www.cnblogs.com/jacson/p/4621275.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!