Cache Statistics (recordStats) 使用指南
概述
已啟用 Caffeine 緩存統計功能,可以監控緩存的性能指標。
配置說明
application.properties
spring.cache.type=caffeine
spring.cache.caffeine.spec=maximumSize=28000,expireAfterWrite=1d,recordStats
recordStats: 啟用統計記錄功能- 會輕微影響性能(約 5-10%),但提供寶貴的監控數據
API 端點
1. 查詢單個緩存統計
GET /CacheStats/getCacheStats?cacheName=apimAuthKeys
響應示例:
{
"cacheName": "apimAuthKeys",
"hitCount": 150,
"missCount": 10,
"hitRate": "93.75%",
"missRate": "6.25%",
"requestCount": 160,
"loadSuccessCount": 10,
"loadFailureCount": 0,
"totalLoadTime": 5000000000,
"averageLoadPenalty": 500000000,
"evictionCount": 2,
"estimatedSize": 8
}
2. 查詢所有緩存統計
GET /CacheStats/getAllCacheStats
響應示例:
{
"apimAuthKeys": {
"cacheName": "apimAuthKeys",
"hitCount": 150,
...
}
}
統計指標說明
| 指標 | 說明 |
|---|---|
hitCount |
緩存命中次數 |
missCount |
緩存未命中次數 |
hitRate |
命中率百分比 |
missRate |
未命中率百分比 |
requestCount |
總請求次數 (hit + miss) |
loadSuccessCount |
成功加載次數 |
loadFailureCount |
加載失敗次數 |
totalLoadTime |
總加載時間(納秒) |
averageLoadPenalty |
平均加載時間(納秒) |
evictionCount |
驅逐次數 |
estimatedSize |
當前緩存條目數 |
使用場景
1. 性能監控
定期查詢統計數據,監控緩存效能:
curl http://localhost:8080/CacheStats/getCacheStats?cacheName=apimAuthKeys
2. 調優參考
- 低命中率 (<80%): 考慮增加 TTL 或調整業務邏輯
- 高驅逐率: 考慮增加
maximumSize - 高平均加載時間: Key Vault 訪問可能有性能問題
3. 容量規劃
- 監控
estimatedSize與maximumSize的比例 - 如果經常達到上限並驅逐,考慮擴容
集成監控系統
Prometheus/Grafana
可以定期調用 API 並導出指標到監控系統:
// 示例:定時任務導出統計
@Scheduled(fixedRate = 60000) // 每分鐘
public void exportCacheMetrics() {
Map<String, Object> stats = cacheStatsController.getAllCacheStats();
// 推送到 Prometheus Pushgateway 或其他監控系統
}
注意事項
- 性能影響:
recordStats會有輕微性能開銷,生產環境可接受 - 統計重置: 應用重啟後統計數據會重置
- 線程安全: Caffeine 的統計是線程安全的
- 實時性: 統計數據是實時更新的
故障排查
問題:統計數據全為 0
- 確認
recordStats已在配置中啟用 - 確認緩存已被使用(至少調用過一次)
問題:命中率異常低
- 檢查 cache key 是否正確(使用
CacheConstants) - 檢查 TTL 是否過短導致頻繁過期
- 檢查是否有頻繁的
@CacheEvict操作
相關代碼
- 配置常量:
com.wpg.config.CacheConstants - 統計 API:
com.wpg.controller.CacheStatsController - 緩存服務:
com.wpg.service.ConnectUrlService.getApimAuthKey() - 手動刷新:
com.wpg.controller.CreditController.refreshApimAuthKey()