ThinkPHP3.1快速入门(10)缓存
来源:互联网 发布:vb 连接informix odbc 编辑:程序博客网 时间:2024/05/21 20:24
ThinkPHP3.1快速入门(10)缓存
在项目中,合理的使用缓存对性能有较大的帮助。ThinkPHP提供了方便的缓存方式,包括数据缓存、静态缓存和查询缓存等,支持包括文件方式、APC、Db、Memcache、Shmop、Sqlite、Redis、Eaccelerator和Xcache在内的动态数据缓存类型,以及可定制的静态缓存规则,并提供了快捷方法进行存取操作。
数据缓存
在ThinkPHP中进行缓存操作,一般情况下并不需要直接操作缓存类,因为系统内置对缓存操作进行了封装,3.1版本推荐的数据缓存方法是cache方法,基本的用法是:
1
cache(array('type'=>'xcache','expire'=>60));
缓存初始化可以支持的参数根据不同的缓存方式有所区别,常用的参数是:
expire
缓存有效期(时间为秒)
prefix
缓存标识前缀
type
缓存类型
核心版本只有File缓存方式的支持,其他的缓存方式支持需要下载单独的缓存驱动,并放入系统目录的Extend/Driver/Cache/下面,否则会出现不支持缓存类型的错误提示。
有些缓存方式会有一些自身特殊的参数,例如Memcache缓存,还需要配置其他的参数:
cache(array('type'=>'memcache','host'=>'192.168.1.10','port'=>'11211','prefix'=>'think','expire'=>60));
对于全局的缓存方式,一般我们建议添加prefix(缓存前缀)参数用以区分不同的应用,以免混淆。
2
cache('a',$value);
会按照缓存初始化时候的参数进行缓存数据,也可以在缓存设置的时候改变参数,例如:
cache('a',$value,300);//
甚至改变之前的缓存方式或者更多的参数:
cache('a',$value,array('type'=>'file','expire'=>300));//
如果你在缓存设置的时候采用上面的数组方式传入参数的话,会影响到后面的缓存存取。
3
$value
缓存读取的是前面缓存设置的值,这个值会受缓存初始化或者缓存设置的时候传入的参数影响。
如果缓存标识不存在或者已经过期,则返回false,否则返回缓存值。
4
cache('a',null);
删除缓存标识为name的缓存数据。
如果要切换缓存方式,可以再次进行缓存初始化操作或者使用下面的方式:
$cache
$cache->name
$value
unset($cache->name);
如果你设置了缓存前缀的话,对应的缓存操作只是对应该缓存前缀标识的,不会影响其他的缓存。
数据缓存可以支持缓存队列,简单的说就是可以限制缓存的数量,只需要在初始化的时候指定length参数:
cache(array('type'=>'xcache','length'=>100,'expire'=>60));
设置了length参数后,系统只会缓存最近的100条缓存数据。
快速缓存
如果你仅仅是希望用文件的方式缓存一些简单的数据,并且没有有效期的概念,那么系统还提供了一个快速缓存方法F可以用来更快的操作。
快速缓存Data数据,默认保存在DATA_PATH目录下面
F('data',$Data);
快速缓存Data数据,保存到指定的目录
F('data',$Data,TEMP_PATH);
获取缓存数据
$Data
删除缓存数据
F('data',NULL);
F方法支持自动创建缓存子目录,在DATA_PATH目录下面缓存data数据,如果User子目录不存在,则自动创建:
F('User/data',$Data);
系统内置的数据字段信息缓存就是用了快速缓存机制。
查询缓存
对于及时性要求不高的数据查询,我们可以使用查询缓存功能来提高性能,而且无需自己使用缓存方法进行缓存和获取。
查询缓存功能支持所有的数据库,并且支持所有的缓存方式和有效期。
在使用查询缓存的时候,只需要调用Model类的cache方法,例如:
$Model->cache(true)->select();
如果使用了cache(true)
$Model->cache(true,60,'xcache')->select();
表示当前查询缓存的缓存方式为xcache,并且缓存有效期为60秒。
同样的查询,如果没有使用cache方法,则不会获取或者生成任何缓存,即便是之前调用过Cache方法。
查询缓存只是供内部调用,如果希望查询缓存开放给其他程序调用,可以指定查询缓存的Key,例如:
$Model->cache('cache_name',60)->select();
则可以在外部通过S方法直接获取查询缓存的内容,
$value
除了select方法之外,查询缓存还支持find和getField方法,以及他们的衍生方法(包括统计查询和动态查询方法)。具体应用的时候可以根据需要选择缓存方式和缓存有效期。
静态缓存
要使用静态缓存功能,需要开启HTML_CACHE_ON
静态规则的定义方式如下:
'HTML_CACHE_ON'=>true,
'HTML_FILE_SUFFIX'
'HTML_CACHE_RULES'=>
)
静态缓存文件的根目录在HTML_PATH
第一种是定义全局的操作静态规则,例如定义所有的read操作的静态规则为:
'read'=>array('{id}','60')
其中,{id}
第二种是定义全局的模块静态规则,例如定义所有的User模块的静态规则为:
'user:'=>array('User/{:action}_{id}','600')
其中,{:action}
第三种是定义某个模块的操作的静态规则,例如,我们需要定义Blog模块的read操作进行静态缓存
'blog:read'=>array('{id}',0)
有个别特殊的规则,例如空模块和空操作的静态规则的定义,可以使用下面的方式:
'empty:index'=>array('{:module}_{:action}',0)
'User:_empty'=>array('User/{:action}',0)
第四种方式是定义全局的静态缓存规则,这个属于特殊情况下的使用,任何模块的操作都适用,例如
'*'=>array('{$_SERVER.REQUEST_URI|md5}'),
根据当前的URL进行缓存
静态规则是用于定义要生成的静态文件的名称,静态规则的定义要确保不会冲突,写法可以包括以下情况:
1、使用系统变量
格式:
{$_×××|function}
例如:
{$_GET.name}
{$_SERVER.
2、使用框架特定的变量
例如:{:app}、{:group}
3、使用_GET变量
{var|function}
4、直接使用函数
{|function}
{|time}
5、支持混合定义,例如我们可以定义一个静态规则为:
'{id},{name|md5}'
在{}之外的字符作为字符串对待,如果包含有”/”,会自动创建目录。
例如,定义下面的静态规则:
{:module}/{:action}_{id}
则会在静态目录下面创建模块名称的子目录,然后写入操作名_id.shtml
静态有效时间
附加规则通常用于对静态规则进行函数运算,例如
'read'=>array('Think{id},{name}','60',
翻译后的静态规则是
和静态缓存相关的配置参数包括:
HTML_CACHE_ON
HTML_FILE_SUFFIX
HTML_CACHE_TIME
总结
要善于利用ThinkPHP的缓存功能,更重要的是区分什么时候用何种缓存方式更加有效。缓存也不是万能的,没有缓存是万万不能的^_^
- ThinkPHP3.1快速入门(10)缓存
- ThinkPHP3.1快速入门(1)基础
- ThinkPHP3.1快速入门(1)基础
- ThinkPHP3.1快速入门(1)基础
- thinkPHP3.1快速入门(1)基础
- ThinkPHP3.1快速入门(1)基础
- ThinkPHP3.1快速入门(1)基础
- ThinkPHP3.1快速入门(16)安全
- ThinkPHP3.1快速入门(16)安全
- ThinkPHP3.1 安全快速入门
- ThinkPHP3.1快速入门(1)基础 学习备忘
- ThinkPHP3.1快速入门(2)数据CURD
- ThinkPHP3.1快速入门(3)查询语言
- ThinkPHP3.1快速入门(4)连贯操作
- ThinkPHP3.1快速入门(12)自动验…
- ThinkPHP3.1快速入门(13)自动完…
- ThinkPHP3.1快速入门(2)数据CURD
- ThinkPHP3.1快速入门(3)查询语言
- 3.1的Widget有新玩法啦
- ThinkPHP3.1新特性:命名范围
- ThinkPHP3.1新特性:Action参数绑…
- ThinkPHP3.1 常量参考
- ThinkPHP3.1新特性: 多层MVC支持
- ThinkPHP3.1快速入门(10)缓存
- 模板引擎详解:导入资源文件
- 使用awk合并文件--生成report
- Memcached深度分析
- Windows安装memcached图文教程
- PHP的两个memcache扩展 memcache和…
- php的两个memcached扩展 memcache…
- php操作memcache的使用总结(1)
- php操作memcache的使用总结(2)