PHP手动清理缓存数据怎批量删_PHP批量删除缓存法【批量】

6次阅读

安全批量删除缓存需分类型处理:文件缓存用glob()匹配白名单后校验mtime;redis用SCAN分批删带前缀的key;OPcache只能调opcache_reset()且需权限控制。

PHP手动清理缓存数据怎批量删_PHP批量删除缓存法【批量】

php里怎么安全批量删除缓存文件

直接遍历目录删 filemtime() 超期的缓存文件最常用,但必须加路径白名单和文件名校验,否则容易误删配置或日志。别信“一键清空缓存目录”的脚本,rm -rfunlink() 递归没过滤等于自毁。

glob() 按规则匹配缓存文件再删

glob()scandir() 更适合批量删缓存,能用通配符限定扩展名和命名模式,避免扫到非缓存文件。

  • 只删 .cache.json 缓存:glob('/path/to/cache/*.cache')glob('/path/to/cache/*.json')
  • 排除子目录干扰(默认不递归):glob('/path/to/cache/*.{cache,json}', GLOB_BRACE)
  • 加时间判断再删:if (time() - filemtime($f) > 3600) { unlink($f); }

redis 缓存批量删 key 要避开 KEYS *

KEYS * 在生产 Redis 上禁用——它会阻塞线程大数据量时可能卡住整个服务。必须用 SCAN 游标分批处理。

  • PHP 用 redis->scan() 迭代:$it = NULL; while ($keys = $redis->scan($it, 'cache:*', 100)) { $redis->del($keys); }
  • 前缀要明确,比如统一用 cache:user:cache:post:,删的时候才可控
  • 注意 SCAN 不保证一次返回全量,$it 为 0 才算结束

OPcache 清理不能靠删文件,得调 opcache_reset()

OPcache 是内存级编译缓存,磁盘上没有对应“缓存文件”可删。opcache_reset() 是唯一有效方式,但它需要 PHP-FPM 进程权限且只对当前进程生效。

立即学习PHP免费学习笔记(深入)”;

  • CLI 下执行无效(除非 CLI 启用了 OPcache)
  • Web 请求中调用需配合权限控制,比如加 Token 验证:if ($_GET['token'] === $_SERVER['OPCACHE_TOKEN']) { opcache_reset(); }
  • 批量重载不现实,只能整机刷新;若需局部更新,应改用 opcache_invalidate() 指定单个文件

缓存类型不同,清理机制就完全不一样:文件缓存看路径和时间,Redis 看 key 前缀和游标,OPcache 只能重置内存状态——混用方法只会清不干净或引发故障。

text=ZqhQzanResources