监控Laravel 9缓存命中率需分三层:开发用Debugbar实时查看单请求hit/miss;生产通过监听CacheHit/CacheMissed事件+Redis计数器聚合计算;进阶用Prometheus暴露指标并Grafana可视化趋势,辅以Redis/MongoDB底层验证。

监控 Laravel 9 数据库缓存命中率,关键不是“查一次 SQL”,而是捕获和统计缓存操作的真实行为——尤其是 CacheHit 和 CacheMissed 这两类核心事件。Laravel 本身不直接暴露“命中率”数值,需通过可观测手段聚合原始事件数据。
启用 Debugbar 缓存收集器(开发/测试环境首选)
这是最快捷、零侵入的实时观测方式,适合定位单次请求中的缓存行为:
- 确保已安装
barryvdh/laravel-debugbar并在config/app.php中注册服务提供者 - 编辑
config/debugbar.php,将'cache' => true,并建议设'collect_cache_values' => false(避免生产误用) - 访问页面后,在 Debugbar 右下角点击 Cache 标签页,即可看到本次请求中所有
hit、missed、written操作的键名、耗时与时间戳 - 注意:它不自动计算百分比,但可人工统计当前请求的 hit/total 比例,快速验证某条查询是否真走缓存
监听 CacheHit / CacheMissed 事件(服务端埋点统计)
这是生产环境推荐的基础方案,把每次命中或未命中记为原子计数,再按周期聚合:
- 确认
config/cache.php中'events' => true已开启(默认 Laravel 9 启用) - 生成两个监听器:
php artisan make:listener LogCacheHit --event=Illuminate\Cache\Events\CacheHit和对应CacheMissed监听器 - 在监听器
handle()方法中,使用 Redis 原子命令递增计数器,例如:Redis::incr('cache:hits')和Redis::incr('cache:misses') - 配合 Artisan 命令或定时任务(如每分钟执行),读取两个计数器并计算:
rate = hits / (hits + misses)
对接 Prometheus + Grafana(生产级长期观测)
当需要趋势分析、告警或跨服务对比时,应将指标标准化暴露:
- 引入
prometheus/client_php包,在服务启动时注册两个 Counter:cache_hits_total和cache_misses_total - 在 CacheHit/CacheMissed 监听器中调用
$counter->inc(),确保指标写入内存 registry - 配置 Laravel 路由暴露
/metrics端点(如用laravel-prometheus包),Prometheus 定期抓取 - Grafana 中用 PromQL 查询:
rate(cache_hits_total[1h]) / (rate(cache_hits_total[1h]) + rate(cache_misses_total[1h])),即可绘制小时级命中率曲线
补充验证:检查底层驱动实际表现
某些缓存驱动(如 Redis 或 MongoDB)自身提供运行时状态,可用于交叉验证:
- 对 Redis 驱动,可通过
Redis::command('INFO', ['stats'])获取keyspace_hits与keyspace_misses值,这是 Redis 层面的全局命中率 - 若使用 MongoDB 作缓存后端,可执行
db.runCommand({ serverStatus: 1 }).mem或结合collStats查看缓存集合读写比例 - 注意:这些是驱动层指标,不等同于 Laravel 应用层的命中率,但能帮助判断是代码逻辑问题,还是缓存服务本身配置不当


















