ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 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 ~~~ # 缓存应用集合 ## 参数 ## 模型中应用 ## 缓存应用