• 缓存处理


    一. 数据缓存
    在 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 HomeController;
     2 use ThinkController;
     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}'),
  • 相关阅读:
    wxpython的安装

    拓扑排序
    树,二叉树,森林,三者的转换
    二叉树的遍历
    最短路径
    图的遍历
    图的最小生成树
    哈夫曼树的应用
    哈夫曼树
  • 原文地址:https://www.cnblogs.com/jacson/p/4621275.html
Copyright © 2020-2023  润新知