# Cache 介绍
>[info] 缓存应用包括有哪特别的
1. 关闭当前页面的请求缓存`json($data)->code(201)->allowCache(false);`
2. 数据库操作返回数据
3. 生成配置缓存`optimize:config` `php think optimize:config index`
4. 字段缓存 `php think optimize:schema` [官网文档](https://www.kancloud.cn/manual/thinkphp5_1/354145)
5. 路由缓存 [文档](https://www.kancloud.cn/manual/thinkphp5_1/626033)
6.
##. [/think/facade/Cache常用方法介绍](https://www.kancloud.cn/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文档](hhttps://www.kancloud.cn/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实用笔记