[php] ThinkPHP缓存技术(S(),F(),查询缓存,静态缓存)

Thinkphp缓存有:

 

  1. 数据缓存
  2. 快速缓存
  3. 查询缓存
  4. SQL解析缓存
  5. 静态缓存

 

记:一旦内容被缓存了,在有效期内,可以在任何地方调用

 

一、数据缓存S(缓存类型type,文件名前缀prefix,有效期expire)方法

在Index控制器的index方法下写入

 

// 缓存初始化
S(array('type'=>'File','expire'=>60));
// 设置缓存
S('name','张三');

echo S('name');

 

 

 

访问方法后,会在运行目录下的临时目录生成缓存文件

 

缓存文件的内容:

 

//000000000060s:6:"张三";

以冒号分隔,第一个是时间,第二个是字符串长度,第三个是缓存内容

 

 

tp_是文件名前缀,因为有效期是60秒,所以过了60秒此文件就会自动删除

当然也可以手动删除缓存文件

 

S('name',null);

 

 

 

也可以这样来删除缓存

 

// 缓存初始化
$cache = S(array('type'=>'File','prefix'=>'tp_','expire'=>60));
// 设置缓存
S('name','张三');
// 删除缓存
unset($cache->name);

 

 

 

除此之外,还可以限制缓存的长度,只需在初始化时传入参数length

 

S(array('type'=>'File','length'=>10,'prefix'=>'tp_','expire'=>60));

 

如果缓存超出10条,缓存文件会把开始缓存的内容删掉只保留10条,删除的规则是先进先出的规则 ,就是先设置的先删除。打个比方,如果缓存内容为11条,那么会打第一条删除。。

 

二、快速缓存F(name, value)方法,没有缓存的有效期设置,意思是不手动删除,这是永久存在的

在Index控制器的index方法下写入

 

// 设置缓存
F('name', '张三');
// 输出缓存
echo F('name');

 

访问方法后,会在运行目录下的数据目录生成缓存文件,文件名是缓存的键

 

缓存文件内容(同S方法缓存文件内容一样,只不过这里没有缓存有效期):

 

s:6:"张三";

 

 

 

F方法缓存还支持自动创建子目录的形式

 

F('user/common/name', '张三');
echo F('user/common/name');

 

 

 

对应的目录文件

 

删除缓存同S方法的写法一样

 

F('user/common/name', null);

 

name.php 文件会被删除,但目录结构不会被删除。。

 

三、查询缓存

用这张表来做示范,表名tp_account

缓存id=3的数据,然后打印出来

 

$account = M('account');

$data = $account->cache(true)->where("id=3")->select();

print_r($data);

 

 

 

缓存文件保存在运行目录的临时目录里,缓存内容是以对象的形式存储的

 

//000000000000a:1:{i:0;a:5:{s:2:"id";s:1:"3";s:5:"uname";s:7:"zhangqh";s:3:"pwd";s:6:"123456";s:5:"phone";s:11:"13174125874";s:5:"email";s:13:"123456@qq.com";}}

 

 

 

cache(true) 在查询的同时会根据当前的查询条件等信息生成一个带有唯一标识的查询缓存,这里没有指定key
 

在指定key的情况下:

 

$account = M('account');

$data = $account->cache('third')->where("id=3")->select();

dump(S('third'));

 

输出结果:

 

array
  0 => 
    array
      'id' => string '3' (length=1)
      'uname' => string 'zhangqh' (length=7)
      'pwd' => string '123456' (length=6)
      'phone' => string '13174125874' (length=11)
      'email' => string '123456@qq.com' (length=13)
  0 => 
    array
      'id' => string '3' (length=1)
      'uname' => string 'zhangqh' (length=7)
      'pwd' => string '123456' (length=6)
      'phone' => string '13174125874' (length=11)
      'email' => string '123456@qq.com' (length=13)

 

 

 

指定有效期为3秒,过了有效期缓存文件会自动删除,手动删除使用S方法的删除方法就行了

 

$data = $account->cache('third',3)->where("id=3")->select();

 

使用cache(key) 更容易查询

 

四、SQL解析缓存

如果你的应用有大量的SQL查询需求,那么可以开启SQL解析缓存以减少SQL解析提高性能。要开启SQL解析缓存,只需要设置:

 

'DB_SQL_BUILD_CACHE' => true,  // 开启SQL缓存
'DB_SQL_BUILD_QUEUE' => 'File', // SQL缓存队列类型
'DB_SQL_BUILD_LENGTH' => 20, // SQL缓存长度

 

注意:只有查询方法才支持SQL解析缓存

 

五、静态缓存

静态缓存配置(演示的是全局规则配置)

 

'HTML_CACHE_ON'     =>    true, // 开启静态缓存
'HTML_CACHE_TIME'   =>    60,   // 全局静态缓存有效期(秒)
'HTML_FILE_SUFFIX'  =>    '.shtml', // 设置静态缓存文件后缀
'HTML_PATH' => __APP__ .'/Html/',   // 指定缓存文件存放目录
'HTML_CACHE_RULES'  =>     array(  // 定义静态缓存规则
    'index'=>array('{file}',60)
)

 

当访问http://localhost/demo/home/index/index/file/test 里会在Html目录里生成test.html缓存文件

 

静态地址包括下面几种定义格式:

第一种是定义全局的操作静态规则,例如定义所有的read操作的静态规则为:

 
  1. 'read'=>array('{id}',60)

其中,{id} 表示取$_GET['id'] 为静态缓存文件名,第二个参数表示缓存60秒。

第二种是定义全局的控制器静态规则,例如定义所有的User控制器的静态规则为:

 
  1. 'user:'=>array('User/{:action}_{id}','600')

其中,{:action} 表示当前的操作名称

第三种是定义某个控制器的操作的静态规则,例如,我们需要定义Blog控制器的read操作进行静态缓存

 
  1. 'blog:read'=>array('{id}',0)

第四种方式是定义全局的静态缓存规则,这个属于特殊情况下的使用,任何模块的操作都适用,例如

 
  1. '*'=>array('{$_SERVER.REQUEST_URI|md5}'),

表示根据当前的URL进行缓存。

 

好了,就写到这里了,如果想了解更多,可以查看官方手册:http://document.thinkphp.cn/manual_3_2.html#html_cache

 

欢迎关注技术开发分享录:http://fenxianglu.cn/

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ThinkPHP 6.0提供了多种缓存方式,包括文件缓存、Redis缓存、Memcached缓存、数据库缓存等等。下面分别介绍一下这些缓存方式的使用方法。 文件缓存: 文件缓存是指将数据缓存到文件中,通常情况下建议将文件缓存存储在 /runtime/cache 目录下。下面是一个文件缓存的使用示例: ```php use think\Cache; // 写入缓存 Cache::set('name', 'thinkphp', 3600); // 读取缓存 $name = Cache::get('name'); ``` Redis缓存: Redis缓存是指将数据缓存到Redis数据库中,需要配置Redis连接信息。下面是一个Redis缓存的使用示例: ```php use think\Cache; // 配置Redis连接信息 Cache::connect([ 'type' => 'redis', 'hostname' => '127.0.0.1', 'port' => 6379, 'password' => '', 'select' => 0, 'timeout' => 0, 'expire' => 3600, 'persistent' => false, 'prefix' => '', ]); // 写入缓存 Cache::set('name', 'thinkphp', 3600); // 读取缓存 $name = Cache::get('name'); ``` Memcached缓存: Memcached缓存是指将数据缓存到Memcached服务器中,需要配置Memcached连接信息。下面是一个Memcached缓存的使用示例: ```php use think\Cache; // 配置Memcached连接信息 Cache::connect([ 'type' => 'memcached', 'hostname' => '127.0.0.1', 'port' => 11211, 'expire' => 3600, 'prefix' => '', ]); // 写入缓存 Cache::set('name', 'thinkphp', 3600); // 读取缓存 $name = Cache::get('name'); ``` 数据库缓存: 数据库缓存是指将数据缓存到数据库中,需要配置数据库连接信息。下面是一个数据库缓存的使用示例: ```php use think\Cache; // 配置数据库连接信息 Cache::connect([ 'type' => 'db', 'table' => 'think_cache', 'expire' => 3600, ]); // 写入缓存 Cache::set('name', 'thinkphp', 3600); // 读取缓存 $name = Cache::get('name'); ``` 以上是ThinkPHP 6.0常用的缓存方式,具体使用方法可以参考官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天空还下着雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值