## 概述
ThinkPHP采用`think\Cache`類(實際使用`think\facade\Cache`類即可)提供緩存功能支持。內置支持的緩存類型包括file、redis等。
## 設置
全局的緩存配置需要修改`config/cache.php`文件。
新版的緩存支持多通道,可以隨時切換。默認使用的是文件緩存類型,例如:
~~~
return [
'default' => 'file',
'stores' => [
// 文件緩存
'file' => [
// 驅動方式
'type' => 'file',
// 設置不同的緩存保存目錄
'path' => '../runtime/file/',
],
// redis緩存
'redis' => [
// 驅動方式
'type' => 'redis',
// 服務器地址
'host' => '127.0.0.1',
],
],
];
~~~
緩存參數根據不同的緩存方式會有所區別,通用的緩存參數如下:
| 參數 | 描述 |
| --- | --- |
| type | 緩存類型 |
| expire | 緩存有效期 (默認為0 表示永久緩存) |
| prefix | 緩存前綴(默認為空) |
| serialize | 緩存序列化和反序列化方法 |
## 使用
### 設置緩存
設置緩存有效期
~~~
// 緩存在3600秒之后過期
Cache::set('name', $value, 3600);
~~~
可以使用`DateTime`對象設置過期時間
~~~
Cache::set('name', $value, new DateTime('2019-10-01 12:00:00'));
~~~
如果設置成功返回true,否則返回false。
### 緩存自增
針對數值類型的緩存數據,可以對數字或者浮點型數據,使用自增操作,例如:
~~~
Cache::set('name', 1);
// name自增(步進值為1)
Cache::inc('name');
// name自增(步進值為3)
Cache::inc('name',3);
~~~
### 緩存自減
針對數值類型的緩存數據,可以使用自減操作,例如:
~~~
// name自減(步進值為1)
Cache::dec('name');
// name自減(步進值為3)
Cache::dec('name',3);
~~~
### 獲取緩存
獲取緩存數據可以使用:
~~~
Cache::get('name');
~~~
如果`name`值不存在,則默認返回`null`。
支持指定默認值,例如:
~~~
Cache::get('name','');
~~~
表示如果`name`值不存在,則返回空字符串。
### 追加一個緩存數據
如果緩存數據是一個數組,可以通過`push`方法追加一個數據。
~~~
Cache::set('name', [1,2,3]);
Cache::push('name', 4);
Cache::get('name'); // [1,2,3,4]
~~~
### 刪除緩存
~~~
Cache::delete('name');
~~~
### 獲取并刪除緩存
~~~
Cache::pull('name');
~~~
如果`name`值不存在,則返回`null`。
### 清空緩存
~~~
Cache::clear();
~~~
### 不存在則寫入緩存數據后返回
~~~
Cache::remember('start_time', time());
~~~
如果start\_time緩存數據不存在,則會設置緩存數據為當前時間。
第二個參數可以使用閉包方法獲取緩存數據,并支持依賴注入。
~~~
Cache::remember('start_time', function(Request $request){
return $request->time();
});
~~~
remember方法的第三個參數可以設置緩存的有效期。
### 緩存標簽
支持給緩存數據打標簽,例如:
~~~
Cache::tag('tag')->set('name1','value1');
Cache::tag('tag')->set('name2','value2');
// 清除tag標簽的緩存數據
Cache::tag('tag')->clear();
~~~
緩存標簽不會改變緩存的讀取操作,所以獲取方式依然是:
~~~
Cache::get('name1');
~~~
并支持同時指定多個緩存標簽操作
~~~
Cache::tag(['tag1', 'tag2'])->set('name1', 'value1');
Cache::tag(['tag1', 'tag2'])->set('name2', 'value2');
// 清除多個標簽的緩存數據
Cache::tag(['tag1','tag2'])->clear();
~~~
可以追加某個緩存標識到標簽
~~~
Cache::tag('tag')->append('name3');
~~~
獲取標簽的緩存標識列表
~~~
Cache::getTagItems('tag');
~~~
### 獲取緩存對象
可以獲取緩存對象,并且調用驅動類的高級方法,例如:
~~~
// 獲取緩存對象句柄
$handler = Cache::handler();
~~~
### 助手函數
系統對緩存操作提供了助手函數`cache`,用法如下:
~~~
// 設置緩存數據
cache('name', $value, 3600);
// 獲取緩存數據
var_dump(cache('name'));
// 刪除緩存數據
cache('name', NULL);
// 返回緩存對象實例
$cache = cache();
~~~
## 跨應用緩存
在多應用模式下,默認文件緩存數據是區分不同應用的,如果你希望緩存跨應用,可以設置一個統一的數據緩存`path`目錄。
## 切換緩存類型
沒有指定緩存類型的話,默認讀取的是`default`緩存配置,可以動態切換
~~~
// 使用文件緩存
Cache::set('name','value',3600);
Cache::get('name');
// 使用Redis緩存
Cache::store('redis')->set('name','value',3600);
Cache::store('redis')->get('name');
// 切換到文件緩存
Cache::store('default')->set('name','value',3600);
Cache::store('default')->get('name');
~~~
- 搭建ThinkPHP6的開發環境
- 配置ThinkPHP6
- 必要的基礎知識(basic)
- MVC開發模式
- 控制器(controller)
- 數據庫(database)
- 模型(model)
- 模型關聯(relation)
- 視圖(view)
- Session
- Cookie
- 緩存(cache)
- 上傳(upload)
- 驗證器(validate)
- 驗證碼(captcha)
- 命令行(command)
- 服務器部署(deploy)
- 數據備份(backup)
- 數據同步(synchronization)
- 訂閱服務(subscribe)
- PHP 易混淆知識點
- 助手函數
- MySQL規范
- Redis 規范
- office插件 phpoffice
- 拼音插件 pinyin
- 日期插件 datetime
- 消息插件 amqp
- 產品部署環境的搭建
- PDF 等雜項處理
- 文件上傳
- 常用擴展
- flc/dysms
- 使用示例 ①
- 使用示例 ②
- qiniu/php-sdk
- 簡介
- 使用示例
- 使用示例 2 ②
- liliuwei/thinkphp-jump
- 擴展介紹
- 下載擴展
- 使用方法
- topthink/think-captcha
- 安裝擴展
- 驗證碼顯示
- 更換驗證碼
- 驗證碼校驗
- 驗證碼配置
- 自定義驗證碼
- phpoffice/phpspreadsheet
- 數據寫入表格
- 讀取表格數據
- topthink/think-queue
- 安裝
- 自定義函數
- 任務類
- 帶有日志的任務類