缓存的使用
1.前言
缓存的主要目的是保存上一次访问过且没有过期的数据,合理地使用缓存可以很好地提升访问速度,ThinkPHP
框架提供内置支持的缓存类型包括 file
、memcache
、wincache
、sqlite
、redis
,本小节介绍这几种缓存是如何配置的,配置好缓存之后就可以使用缓存来存储数据,在缓存的数据没有过期之前,再次请求该数据的时候可以直接从缓存中取出来。
2.缓存配置文件
打开 config\cache.php
,设置如下内容:
<?php
// +----------------------------------------------------------------------
// | 缓存设置
// +----------------------------------------------------------------------
return [
// 默认缓存驱动
'default' => env('cache.driver', 'file'),
// 缓存连接方式配置
'stores' => [
'file' => [
// 驱动方式
'type' => 'File',
// 缓存保存目录
'path' => '../runtime/study/',
// 缓存前缀
'prefix' => '',
// 缓存有效期 0表示永久缓存
'expire' => 0,
// 缓存标签前缀
'tag_prefix' => 'tag:',
// 序列化机制 例如 ['serialize', 'unserialize']
'serialize' => [],
],
// redis缓存
'redis' => [
// 驱动方式
'type' => 'redis',
// 服务器地址
'host' => env('REDIS.HOST', '127.0.0.1'),
],
],
];
如下图所示:
Tips: 其中默认缓存驱动中的
env('cache.driver', 'file')
表示从.env
文件中出[CACHE]
模块下的DRIVER
变量的值,默认是file
,redis
配置中的env('REDIS.HOST', '127.0.0.1')
也是同理。
3.配置 .env 文件
打开 .env
文件,加入如下类容:
[CACHE]
DRIVER = file
[REDIS]
HOST = 127.0.0.1
如下图所示:
Tips:
redis
的配置需要根据实际的ip
去填写,为了学习方便,这里可以将DRIVER
设置为file
,表示默认使用文件缓存,若实际业务中,可以根据配置好的redis
,将DRIVER
设置为redis
也可以。
4.设置和取出缓存
在 app\controller\Index.php
中的 index()
方法加入如下代码:
Cache::set('access_token',"zmxlspwoigydhxnmslqo",3600);
halt(Cache::get('access_token'));
如下图所示:
Tips: 其中
Cache::set('access_token',"zmxlspwoigydhxnmslqo",3600)
表示给access_token
这个缓存名设置一个值zmxlspwoigydhxnmslqo
,过期时间为3600s
之后,在3600s
之内该值就会一直保存在缓存中,注意第二参数也能保存一个数组。
请求打印结果如下图:
5.缓存标签
可以将同一类缓存加上同一个标签,这样在需要同时清理的时候就会很方便:
Cache::tag('study')->set('name1','qsx1',10);
Cache::tag('study')->set('name2','qsx2',10);
Cache::tag('study')->set('name3','qsx3',10);
Cache::tag('study')->set('name4','qsx4',10);
Cache::tag('study_01')->set('name5','qsx5',10);
$name1 = Cache::get('name1');
$name2 = Cache::get('name2');
$name3 = Cache::get('name3');
$name4 = Cache::get('name4');
$name5 = Cache::get('name5');
print_r([$name1,$name2,$name3,$name4,$name5]);
//清除 tag = study 的所有缓存
Cache::tag('study')->clear();
$name1 = Cache::get('name1');
$name2 = Cache::get('name2');
$name3 = Cache::get('name3');
$name4 = Cache::get('name4');
$name5 = Cache::get('name5');
print_r([$name1,$name2,$name3,$name4,$name5]);die;
如下图所示:
Tips: 其中
Cache::tag('study')->clear();
表示将打过tag
为study
的缓存清除掉,可以使用Cache::tag('study')->append('namex')
这种方式给没有打标签的缓存打上标签。
请求打印结果如下图:
6.小结
本小节主要介绍了如何配置缓存,若要更换默认缓存方式,可以在 .env
文件中将 [CACHE]
变量模块下的 DRIVER
设置为对应的缓存方式,如 redis
、file
,缓存的主要目的是保存上一次访问过且没有过期的数据,合理地使用缓存可以很好地提升访问速度,有些场景下某些值不能频繁获取,需要将该值在有效期时间内缓存起来,例如使用微信公众平台等接口时获取 access_token
,有效期 7200s
,在有效期内限制了获取 access_token
的次数,此时使用缓存将会变得很方便。
Tips: 代码仓库:https://gitee.com/love-for-poetry/tp6