PHP缓存命中率需按后端分层监控:APCu用apcu_cache_info()取num_hits/num_misses;Redis用INFO stats的keyspace_hits/misses差分计算;OpCache的hits仅反映文件加载,与业务数据缓存无关。
PHP 本身不提供内置的缓存命中率监控机制,必须依赖具体缓存后端(如 Redis、APCu、Memcached)暴露的指标,再通过代码主动采集和计算。直接读 opcache_get_status() 或调用 Redis::info() 是最可行的起点。
查 APCu 缓存命中率:用 apcu_cache_info() 看实时计数
APCu 的命中/未命中数据藏在 apcu_cache_info('user') 或 apcu_cache_info('system') 返回数组的 num_hits 和 num_misses 字段里,不是所有版本都默认开启统计——需确认 apc.enable_cli=1(CLI 下)且 apc.stat=1(Web 下),否则 num_hits 恒为 0。
实操建议:
- 每次采样先调用
apcu_clear_cache('user')清空前状态(仅开发/测试环境),避免旧数据干扰趋势判断 - 命中率 =
num_hits / (num_hits + num_misses),分母为 0 时需单独处理,避免除零警告 - 不要在高并发请求中频繁调用
apcu_cache_info(),它会锁住共享内存段,可能拖慢响应
Redis 缓存命中率:解析 INFO commandstats 和 INFO stats
Redis 的 keyspace_hits / keyspace_misses 只反映 GET/SET 类命令,而 commandstats 能看到每个命令的调用次数与耗时,更适合定位「哪些操作拖累命中率」。
立即学习“PHP免费学习笔记(深入)”;