ThinkPHP6.0启用Redis缓存需同时满足三条件:安装启用phpredis扩展、config/cache.php中完整配置redis连接参数(host/port/password/database)、设置default为'redis'或显式调用Cache::store('redis');支持键值操作、查询缓存、请求缓存三层机制。

ThinkPHP6.0 的缓存功能灵活且分层清晰,既支持简单键值缓存,也支持数据库查询缓存、请求级缓存和多驱动配置。关键不在于“能不能用”,而在于选对方式、配对驱动、避开常见陷阱。
配置 Redis 缓存驱动
要在项目中真正启用 Redis 缓存,不能只改 cache.php 里的 'type' => 'redis',还要确保:
- PHP 已安装并启用
redis扩展(非phpredis别名,需extension=redis.so或php_redis.dll) -
config/cache.php中的redis连接配置完整,至少包含host、port(默认 6379)、password(如有)和database(如需指定库) -
default值可设为'redis',也可保留'file',按需调用Cache::store('redis')
示例配置片段:
'redis', 'stores' => [ 'redis' => [ 'type' => 'redis', 'host' => '127.0.0.1', 'port' => 6379, 'password' => '', 'database' => 0, 'timeout' => 0, 'expire' => 3600, ], ] ];基础键值缓存操作
直接使用 think\facade\Cache 即可完成常用读写删操作,所有方法都支持自定义过期时间(秒):
立即学习“PHP免费学习笔记(深入)”;
-
Cache::set('user:1001', ['name'=>'张三','age'=>28], 300)—— 写入并设 5 分钟过期 -
Cache::get('user:1001', 'default_value')—— 未命中时返回默认值 -
Cache::inc('counter', 2)/Cache::dec('counter')—— 原子增减(仅 Redis 支持) -
Cache::push('tags', 'php')—— 向列表尾部追加(Redis List 结构) -
Cache::pull('tags')—— 获取并删除首个元素 -
Cache::clear()—— 清空当前驱动下所有缓存(慎用于生产)
数据库查询自动缓存
在 Db 查询链中加入 cache() 方法,框架会自动将结果序列化后存入默认缓存驱动:
-
Db::name('user')->where('id', 1)->cache(true)->find()—— 使用默认配置过期时间 -
Db::name('user')->cache(60)->select([1,2,3])—— 显式设 60 秒 -
Db::name('user')->cache('user_list_202610', 300, 'user')—— 指定 key + 过期 + 标签,便于批量清理
更新或删除同 key 数据时,只要复用相同缓存标识(如 cache('user_list_202610')),TP6 会自动失效旧缓存;主键查询(如 find(1))即使不显式写 key,也能基于主键自动管理缓存。
请求级缓存(GET 页面缓存)
适合内容变动少、访问量大的前端页面,比如文章详情、分类列表:
- 路由中启用:
Route::get('article/:id', 'Article/read')->cache(3600) - 动态 key 示例:
Route::get('list/:cat', 'Article/index')->cache(['list_:cat', 1800]),不同分类独立缓存 - 全局开启:在
middleware.php加think\middleware\CheckRequestCache,并在route.php设置'request_cache_expire' => 3600 - 排除特定路径:
'request_cache_except' => ['/admin/', '/api/']
注意:该缓存存储在默认缓存驱动中,响应头会带 ETag 和 304 Not Modified,前端可配合 CDN 使用。



















