ThinkPHP 5 的缓存标签用于归类管理相关缓存,支持链式调用(如Cache::tag('user')->set())或数组方式(如set(..., ['user','auth'])设置;标签不参与key查找,仅用于精准清除,如Cache::clear('user')可批量删除该标签下所有缓存。

ThinkPHP 5 的缓存标签(tag)主要用于对一组相关缓存进行归类管理,方便批量写入、读取和精准清除,避免误删其他缓存。
怎么设置带标签的缓存
有两种常用方式:
- 链式调用 tag() 方法:先指定标签,再 set 数据 Cache::tag('user')->set('info', $data, 3600);
- 在 set 时直接传入标签数组:适合一次设置多个键并统一打标 Cache::set('profile', $data, 3600, ['user', 'auth']);
注意:同一个缓存键只能归属一个 tag 链式调用(如 tag('user')),但可同时属于多个标签(用数组方式设置)。
怎么根据标签读取缓存
TP5 不支持直接“按标签读取”全部数据(即没有类似 Cache::tag('user')->getall() 的接口),必须通过已知的缓存键来获取:
立即学习“PHP免费学习笔记(深入)”;
- 如果你用
Cache::tag('user')->set('info', ...)设置,就用Cache::get('info')读取; - 标签本身不改变 get/set 的键名逻辑,只影响清除行为。
换句话说:标签是“元信息”,不是“命名空间”。它不参与 key 查找,只用于批量清理。
怎么精准清除某组缓存
这是标签的核心价值——避免清空全部缓存影响其他业务:
- 清除某个标签下的所有缓存:Cache::clear('user');
- 清除多个标签:Cache::clear(['user', 'order']);
-
重要提醒:用
Cache::clear()(无参数)无法清除带标签的缓存;必须显式传入标签名。
例如用户资料更新后,只需执行 Cache::clear('user'),就不会波及商品缓存或配置缓存。
实际使用建议
- 按业务域划分标签,比如
'user'、'article'、'config',不要用过于宽泛或模糊的名称; - 增删改操作后,及时清除对应标签,保证缓存与数据库一致;
- 避免给单条缓存打过多标签,增加管理复杂度;
- 若用 Redis 等驱动,确认其支持标签功能(File 驱动默认支持,Redis 需开启
tag_prefix配置)。



















