Laravel缓存标签支持redis/memcached驱动,通过Cache::tags()写入带标签缓存,可用前缀隔离环境,调用flush()批量清除指定标签(交集匹配)缓存,并支持Artisan命令行清理。

如果您在 Laravel 应用中需要对一组相关缓存项进行统一管理(例如清除某类用户数据、某个模块的所有缓存),但默认的键名方式难以高效定位和批量操作,则可借助缓存标签机制实现分类归档与批量控制。以下是 Laravel 中使用缓存标签批量管理的具体方法:
一、确认缓存驱动支持标签功能
Laravel 的缓存标签(Cache Tags)仅在部分驱动中可用,包括 redis 和 memcached,而 file 与 database 驱动不支持。需确保配置文件 config/cache.php 中默认驱动已设为 redis 或 memcached,并且对应连接正常。
1、打开 config/cache.php 文件。
2、检查 'default' 键值是否为 'redis' 或 'memcached'。
3、确认 'stores.redis.connection' 或 'stores.memcached.servers' 配置项指向有效服务地址。
二、使用 Cache::tags() 写入带标签的缓存项
通过 Cache::tags() 方法可为缓存项打上一个或多个逻辑标签,后续可基于标签执行统一操作。每个标签必须为字符串,多个标签以数组形式传入,Laravel 将自动建立标签与键之间的映射关系。
1、在控制器或服务类中引入 Illuminate\Support\Facades\Cache。
2、调用 Cache::tags(['users', 'profile'])→put('user_123', $data, 3600) 存储缓存。
3、可叠加多个标签,如 Cache::tags(['admin', 'notifications', 'unread'])→put('notif_456', $msg, 7200)。
三、使用标签前缀隔离环境或模块
当多个项目共用同一 Redis 实例时,直接使用相同标签可能导致跨项目误删。可在标签名中嵌入环境标识或模块前缀,形成逻辑隔离空间,避免冲突。
1、定义常量 APP_TAG_PREFIX = env('CACHE_TAG_PREFIX', 'prod_')。
2、写入缓存时组合标签:Cache::tags([APP_TAG_PREFIX.'users', APP_TAG_PREFIX.'settings'])→put('config_v1', $cfg, 86400)。
3、清除操作也需使用完全一致的前缀标签组合,否则无法匹配。
四、批量清除指定标签下的所有缓存
调用 tagged() 方法后接 flush(),即可删除该标签(或标签组合)下所有关联缓存项,无需遍历键名,也不依赖通配符扫描,效率高且精准。
1、执行 Cache::tags(['users'])->flush() 清除所有标记为 'users' 的缓存。
2、执行 Cache::tags(['admin', 'permissions'])->flush() 清除同时拥有这两个标签的缓存项(交集匹配)。
3、注意:若使用多标签,flush() 仅作用于完全匹配该标签集合的缓存,而非任一标签。
五、通过 Artisan 命令行批量清理标签缓存
在部署或维护场景中,可通过自定义 Artisan 命令触发标签级清理,便于集成 CI/CD 流程或定时任务,避免手动干预。
1、运行 php artisan make:command ClearTaggedCache 创建命令类。
2、在 handle() 方法中调用 Cache::tags($this->argument('tags'))->flush()。
3、注册命令签名,如 protected $signature = 'cache:clear-tagged {tags* : Tag names to clear}'。
4、执行 php artisan cache:clear-tagged users notifications 清理多标签缓存。

















