# Cache 介紹
>[info] 緩存應用包括有哪特別的
1. 關閉當前頁面的請求緩存`json($data)->code(201)->allowCache(false);`
2. 數據庫操作返回數據
3. 生成配置緩存`optimize:config` `php think optimize:config index`
4. 字段緩存 `php think optimize:schema` [官網文檔](http://www.hmoore.net/manual/thinkphp5_1/354145)
5. 路由緩存 [文檔](http://www.hmoore.net/manual/thinkphp5_1/626033)
6.
##. [/think/facade/Cache常用方法介紹](http://www.hmoore.net/manual/thinkphp5_1/354116)
1. 獲取并刪除緩存 `Cache::pull('name');`
2. 刪除緩存`Cache::rm('name');`
3. 清空緩存`Cache::clear()`
4. 不存在則寫入緩存數據后返回
~~~
Cache::remember('name',function(){
return time();
});
~~~
5.獲取緩存對象
~~~
$cache = Cache::init();
// 獲取緩存對象句柄
$handler = $cache->handler();
~~~
6.助手函數
~~~
$options = [
// 緩存類型為File
'type' => 'File',
// 緩存有效期為永久有效
'expire' => 0,
// 指定緩存目錄
'path' => APP_PATH . 'runtime/cache/',
];
// 緩存初始化
// 不進行緩存初始化的話,默認使用配置文件中的緩存配置
cache($options);
// 設置緩存數據
cache('name', $value, 3600);
// 獲取緩存數據
var_dump(cache('name'));
// 刪除緩存數據
cache('name', NULL);
~~~
### 緩存標簽
~~~
Cache::tag('tag')->set('name1','value1');
Cache::tag('tag')->set('name2','value2');
// 或者批量設置緩存標簽
Cache::set('name1','value1');
Cache::set('name2','value2');
Cache::tag('tag',['name1','name2']);
// 清除tag標簽的緩存數據
Cache::clear('tag');
~~~
### 同時使用多個緩存類型
~~~
$options = [
// 緩存類型為File
'type' => 'File',
// 緩存有效期為永久有效
'expire'=> 0,
//緩存前綴
'prefix'=> 'think',
// 指定緩存目錄
'path' => '../runtime/cache/',
];
Cache::connect($options)->set('name','value',3600);
Cache::connect($options)->get('name');
~~~
~~~
// 使用文件緩存
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');
~~~
##. [cache文檔](hhttp://www.hmoore.net/manual/thinkphp5_1/354019)
>[info] `cache`方法用于查詢緩存操作,也是連貫操作方法之一
**cache**可以用于`select`、`find`、`value`和`column`方法,以及其衍生方法,使用`cache`方法后,在緩存有效期之內不會再次進行數據庫查詢操作,而是直接獲取緩存中的數據,關于數據緩存的類型和設置可以參考緩存部分。
~~~
Db::table('think_user')->where('id',5)->cache(true)->find();
Db::table('think_user')->cache(true,60)->find();
// 或者使用下面的方式 是等效的
Db::table('think_user')->cache(60)->find();
~~~
應用key 及 tab標簽
~~~
$result = Db::table('think_user')->cache('key',60)->find();
$data = \think\Cache::get('key');
Db::table('think_user')->cache('key',60,'tagName')->find();
~~~
### 緩存自動更新
>[danger] 疑問:如果是通過column獲取一個數據并緩存,添加,刪除,變更會也自動識別更新緩存呢?
還是需要自已寫判斷代碼,重要緩存; ***之前一直用event還處理這個問題***
當你刪除或者更新數據的時候,可以調用相同`key`的`cache`方法,會自動更新(清除)緩存,例如:
~~~
Db::table('think_user')->cache('user_data')->select([1,3,5]);
Db::table('think_user')->cache('user_data')->update(['id'=>1,'name'=>'thinkphp']);
Db::table('think_user')->cache('user_data')->select([1,5]);
~~~
注意:
最后查詢的數據不會受第一條查詢緩存的影響,確保查詢和更新或者刪除使用相同的緩存標識才能自動清除緩存。
如果使用`find`方法并且使用主鍵查詢的情況,不需要指定緩存標識,會自動清理緩存,例如:
~~~
Db::table('think_user')->cache(true)->find(1);
Db::table('think_user')->update(['id'=>1,'name'=>'thinkphp']);
Db::table('think_user')->cache(true)->find(1);
~~~
# 命令行清除緩存文件
~~~
php think clear
~~~
~~~
php think clear --path d:\www\tp5\runtime\log\
~~~
清除日志目錄
~~~
php think clear --log
~~~
清除日志目錄并刪除空目錄
~~~
php think clear --log --dir
~~~
清除數據緩存目錄
~~~
php think clear --cache
~~~
~~~
php think clear --route
~~~
# 緩存應用集合
## 參數
## 模型中應用
## 緩存應用
- 文檔說明
- 5.1對比5.0.X版本需要注意點
- 待解答問題QA
- THINKPHP基礎
- 常用技巧
- tp5.1系統信息
- 容器、Facade、依賴注入
- 其它要點記錄
- 數據庫與模型
- 數據集
- AQ問題集
- API開發
- restful開發
- restful測試之ZClient開發
- api開發
- 緩存
- 組件開發
- 采集組件ZSnoopy
- restful測試組件ZClient
- thinkphp各功能模塊
- thinkphp-Log
- 隊列thinkphp-Queue
- THINKPHP擴展
- 單元測試
- 類庫庫遷移工具Migration
- 命令行
- 關于console擴展要點
- 附錄
- 第三方實用PHP庫
- 實用IP庫
- phpQuery庫
- Guzzle庫
- Markdown解釋庫Parsedown
- 上線的項目debug組件
- nette/utils實用函數庫
- 推薦框架DolphinPHP
- Thinkphp之widget
- 表單組件form
- 前端框架推薦
- 推薦框架fastadmin
- PHP7最新語法
- 前端框架
- Echart
- mysql觸發器
- PHP實用技巧與函數
- composer實用筆記