緩存的使用
1.前言
緩存的主要目的是保存上一次訪問過且沒有過期的數(shù)據(jù),合理地使用緩存可以很好地提升訪問速度,ThinkPHP
框架提供內(nèi)置支持的緩存類型包括 file
、memcache
、wincache
、sqlite
、redis
,本小節(jié)介紹這幾種緩存是如何配置的,配置好緩存之后就可以使用緩存來存儲數(shù)據(jù),在緩存的數(shù)據(jù)沒有過期之前,再次請求該數(shù)據(jù)的時候可以直接從緩存中取出來。
2.緩存配置文件
打開 config\cache.php
,設置如下內(nèi)容:
<?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
的配置需要根據(jù)實際的ip
去填寫,為了學習方便,這里可以將DRIVER
設置為file
,表示默認使用文件緩存,若實際業(yè)務中,可以根據(jù)配置好的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
之內(nèi)該值就會一直保存在緩存中,注意第二參數(shù)也能保存一個數(shù)組。
請求打印結果如下圖:
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.小結
本小節(jié)主要介紹了如何配置緩存,若要更換默認緩存方式,可以在 .env
文件中將 [CACHE]
變量模塊下的 DRIVER
設置為對應的緩存方式,如 redis
、file
,緩存的主要目的是保存上一次訪問過且沒有過期的數(shù)據(jù),合理地使用緩存可以很好地提升訪問速度,有些場景下某些值不能頻繁獲取,需要將該值在有效期時間內(nèi)緩存起來,例如使用微信公眾平臺等接口時獲取 access_token
,有效期 7200s
,在有效期內(nèi)限制了獲取 access_token
的次數(shù),此時使用緩存將會變得很方便。
Tips: 代碼倉庫:https://gitee.com/love-for-poetry/tp6