您好,欢迎访问一九零五行业门户网

thinkphp有哪些缓存类型

thinkphp提供了方便的缓存方式,包括数据缓存、静态缓存和查询缓存等,支持包括文件方式、apc、db、memcache、shmop、sqlite、redis、eaccelerator和xcache在内的动态数据缓存类型,以及可定制的静态缓存规则,并提供了快捷方法进行存取操作。
数据缓存
thinkphp缓存文件的配置
home是我建立的前台项目,在home\conf\config.php找到缓存的配置文件,配置如下:
<?php return array( 'db_type'=>'mysql', 'db_host'=>'127.0.0.1', 'db_name'=>'w3note', 'db_user'=>'root', 'db_pwd'=>'123456', 'db_port'=>'3306', 'db_prefix'=>'w3_', 'data_cache_type'=>'file',//设置缓存方式为file 'data_cache_time'=>'600',//缓存周期600秒 ); ?>
thinkphp缓存函数的使用
在thinkphp中,使用快捷缓存函数s()进行缓存,其用法如下:
s('data',$data);//使用data标识缓存$data数据 s('data',$data,600);// 缓存$data数据600秒 $data = s('data');// 获取缓存数据 s('data',null);// 删除缓存数据
实例演示
<?php // 本类由系统自动生成,仅供测试用途 class indexaction extends action{ public function index(){ //如果有缓存,则读取缓存数据 //如果没有缓存,则读取数据库当中的数据放入缓存 $lists=s('lists'); if(emptyempty($lists)){ $news=m('news'); $lists=$news->select(); s('lists',$lists,600); echo '这是直接读取数据库的数据'; } dump($list); ?>
访问http://127.0.0.1/home/index.php/index/index,
第一次访问:
这是直接读取数据库的数据
array(10) { [0] => array(12) { ["id"] => string(1) "1" ["catid"] => string(2) "13" ["title"] => string(4) "thinkphp的缓存技术" ["content"] => string(8) "thinkphp的缓存技术" ["tags"] => string(4) "缓存" ["thumb"] => string(0) "" ["description"] => string(7) "thinkphp的缓存技术" ["inputtime"] => string(10) "1348370202" ["posid"] => string(1) "1" ["ord"] => string(1) "2" ["hits"] => string(1) "1" ["status"] => string(1) "1" }

第二次访问:
array(10) { [0] => array(12) { ["id"] => string(1) "1" ["catid"] => string(2) "13" ["title"] => string(4) "thinkphp的缓存技术" ["content"] => string(8) "thinkphp的缓存技术" ["tags"] => string(4) "缓存" ["thumb"] => string(0) "" ["description"] => string(7) "thinkphp的缓存技术" ["inputtime"] => string(10) "1348370202" ["posid"] => string(1) "1" ["ord"] => string(1) "2" ["hits"] => string(1) "1" ["status"] => string(1) "1" }

说明:第一次运行时,会打印出如上面所示信息,刷新一下页面后,少了 “ 这是直接读取数据库的数据" ,说明读取的是先前生成的缓存数据。
相关推荐:《thinkphp教程》
快速缓存
如果你仅仅是希望用文件的方式缓存一些简单的数据,并且没有有效期的概念,那么系统还提供了一个快速缓存方法f可以用来更快的操作。
快速缓存data数据,默认保存在data_path目录下面
f('data',$data);
快速缓存data数据,保存到指定的目录
f('data',$data,temp_path);
获取缓存数据
$data = f('data');
删除缓存数据
f('data',null);
f方法支持自动创建缓存子目录,在data_path目录下面缓存data数据,如果user子目录不存在,则自动创建:
f('user/data',$data);
3.1.2版本开始f方法支持使用通配符批量删除功能,使用如下:
f('user/*',null);
表示删除data_path.'user/'目录下面的数据缓存。
系统内置的数据字段信息缓存就是用了快速缓存机制。
查询缓存
对于及时性要求不高的数据查询,我们可以使用查询缓存功能来提高性能,而且无需自己使用缓存方法进行缓存和获取。
app/config.php配置:
'data_cache_time' => 60, // 数据缓存有效期 0表示永久缓存'data_cache_type' => 'file', // 数据缓存类型,支持:file|db|apc|memcache|shmop|sqlite|xcache|apachenote|eaccelerator'db_sql_build_cache' => true,'db_sql_build_length' => 20, // sql缓存的队列长度'data_cache_path' => temp_path,
查询缓存功能支持所有的数据库,并且支持所有的缓存方式和有效期。
在使用查询缓存的时候,只需要调用model类的cache方法,例如:
$model->cache(true)->select();
如果使用了cache(true) ,则在查询的同时会根据当前的查询sql生成查询缓存,默认情况下缓存方式采用data_cache_type参数设置的缓存方式(系统默认值为file表示采用文件方式缓存),缓存有效期是data_cache_time 参数设置的时间,也可以单独制定查询缓存的缓存方式和有效期:
$model->cache(true,60,'xcache')->select();
表示当前查询缓存的缓存方式为xcache,并且缓存有效期为60秒。
同样的查询,如果没有使用cache方法,则不会获取或者生成任何缓存,即便是之前调用过cache方法。
查询缓存只是供内部调用,如果希望查询缓存开放给其他程序调用,可以指定查询缓存的key,例如:
$model->cache('cache_name',60)->select();
则可以在外部通过s方法直接获取查询缓存的内容,
$value = s('cache_name');
除了select方法之外,查询缓存还支持find和getfield方法,以及他们的衍生方法(包括统计查询和动态查询方法)。具体应用的时候可以根据需要选择缓存方式和缓存有效期。
sql解析缓存
除了查询缓存之外,thinkphp还支持sql解析缓存,因为thinkphp的orm机制,所有的sql都是动态生成的,然后由数据库驱动执行。
所以如果你的应用有大量的sql查询需求,那么可以开启sql解析缓存以减少sql解析提高性能。要开启sql解析缓存,只需要设置:
'db_sql_build_cache' => true,
即可开启数据库查询的sql创建缓存,默认缓存方式为文件方式,还可以支持xcache和apc方式缓存,只需要设置:
'db_sql_build_queue' => 'xcache',
我们知道,一个项目的查询sql的量可能会非常巨大,所以有必要设置下缓存的队列长度,例如,我们希望sql解析缓存不超过20条记录,可以设置:
'db_sql_build_length' => 20, // sql缓存的队列长度
注意:只有查询方法才支持sql解析缓存
静态缓存
要使用静态缓存功能,需要开启html_cache_on参数,并且使用html_cache_rules配置参数设置静态缓存规则文件 。
虽然也可以在应用配置文件中定义静态缓存规则,但是建议是在模块配置文件中为不同的模块定义静态缓存规则。
静态规则定义
静态规则的定义方式如下:
'html_cache_on' => true, // 开启静态缓存'html_cache_time' => 60, // 全局静态缓存有效期(秒)'html_file_suffix' => '.shtml', // 设置静态缓存文件后缀'html_cache_rules' => array( // 定义静态缓存规则 // 定义格式1 数组方式 '静态地址' => array('静态规则', '有效期', '附加规则'), // 定义格式2 字符串方式 '静态地址' => '静态规则', )
定义格式1采用数组方式 便于单独为某个静态规则设置不同的有效期,定义格式2采用字符串方式订阅静态规则,同时采用html_cache_time设置的全局静态缓存有效期。
静态缓存文件的根目录在html_path定义的路径下面,并且只有定义了静态规则的操作才会进行静态缓存。 并且静态缓存支持不同的存储类型。 静态缓存仅在get请求下面有效。
静态地址
静态地址包括下面几种定义格式:
第一种是定义全局的操作静态规则,例如定义所有的read操作的静态规则为:
'read'=>array('{id}',60)
其中,{id}
表示取$_get['id']
为静态缓存文件名,第二个参数表示缓存60秒。
第二种是定义全局的控制器静态规则,例如定义所有的user控制器的静态规则为:
'user:'=>array('user/{:action}_{id}','600')
其中,{:action}
表示当前的操作名称
第三种是定义某个控制器的操作的静态规则,例如,我们需要定义blog控制器的read操作进行静态缓存
'blog:read'=>array('{id}',0)
第四种方式是定义全局的静态缓存规则,这个属于特殊情况下的使用,任何模块的操作都适用,例如:
'*'=>array('{$_server.request_uri|md5}'),
表示根据当前的url进行缓存。
静态规则
静态规则是用于定义要生成的静态文件的名称,静态规则的定义要确保不会冲突,写法可以包括以下情况:
1.使用系统变量
包括 _get、_request、_server、_session、_cookie
格式:
{$_×××|function}
例如:
{$_get.name} {$_server.request_uri|md5}
2.使用框架特定的变量
{:module} 、{:controller} 和{:action}
分别表示当前模块名、控制器名和操作名。
例如:
{:module}/{:controller}_{:action}
3.使用_get变量
{var|function}也就是说 {id}其实等效于 {$_get.id}
4.直接使用函数
{|function} 例如:{|time}
5.支持混合定义
例如我们可以定义一个静态规则为:
'{id},{name|md5}'
在{}之外的字符作为字符串对待,如果包含有"/",会自动创建目录。
例如,定义下面的静态规则:
{:module}/{:action}_{id}
则会在静态目录下面创建模块名称的子目录,然后写入操作名_id.shtml 文件。
静态缓存有效期
单位为秒。如果不定义,则会获取配置参数html_cache_time的设置值,如果定义为0则表示永久缓存。
附加规则
通常用于对静态规则进行函数运算,例如:
'read'=>array('think{id},{name}','60', 'md5')
翻译后的静态规则是
md5('think'.$_get['id']. ', '.$_get['name']);
以上就是thinkphp有哪些缓存类型的详细内容。
其它类似信息

推荐信息