thinkphp 5 的查询缓存标签(tag)用于按业务维度批量管理缓存,支持在数据库连贯操作中通过 cache() 第三个参数设置(如 'user_list'),或用 cache::tag('tag_name') 统一打标;清除时须调用 cache::clear('tag_name'),且需驱动支持(file、redis 支持,apc 不支持)。

ThinkPHP 5 的查询缓存标签(Tag)主要用于按业务维度批量管理缓存,比如「用户相关缓存」、「文章分类缓存」等。设置标签后,可精准清除某类缓存,避免误删其他数据。
一、在数据库查询中直接加标签
使用 cache() 方法的第三个参数传入标签名即可:
Db::name('user')->where('status', 1)->cache(true, 3600, 'user_list')->select();db('article')->cache('article_2026', 7200, 'article_hot')->find(101);
注意:第三个参数是字符串类型的标签名,不是数组;标签名建议用英文+下划线,避免特殊字符或空格。
二、用 Cache::tag() 方式统一管理
适用于需要为多个缓存项打同一标签的场景,例如一组配置项、一批关联数据:
Cache::tag('config')->set('site_name', 'MySite', 3600);Cache::tag('config')->set('logo_url', '/static/logo.png', 3600);Cache::tag('user_123')->set('profile', $data, 1800);
这样所有用 Cache::tag('config') 设置的缓存,后续可用一条命令清除。
三、清除带标签的缓存
普通 Cache::clear() 对带标签的缓存无效,必须显式指定标签:
-
Cache::clear('user_list');—— 清除所有打了user_list标签的缓存 -
Cache::clear('config');—— 清除全部 config 标签缓存
如果用了复合缓存驱动(如同时配了 file 和 redis),标签功能仍有效,但需确保所用驱动支持标签(File、Redis 都支持;部分轻量驱动如 Apc 不支持)。
四、注意事项
标签名本身不参与缓存键生成,只是元信息;实际缓存键仍由系统自动生成(含前缀、哈希等)。建议:
- 业务前缀 + 标签名组合使用,例如
Cache::tag('user_api')->set('token_456', ...) - 避免标签名过长或动态拼接不可控内容(如用户输入)
- 开发阶段配合
php think clear --cache清物理文件时,标签信息也会一并清理
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











