Skip to content

[Phase2-1.5] QueryHash 快取層 (IAnalysisCache + MemoryCache) #97

@cct08311github

Description

@cct08311github

Parent Epic

#90

任務

利用已有的 QueryHash 建立查詢結果快取,避免重複聚合運算。

實作

新增 Analysis/IAnalysisCache.cs

public interface IAnalysisCache
{
    bool TryGet(string queryHash, out AnalysisQueryResponse? cached);
    void Set(string queryHash, AnalysisQueryResponse response, TimeSpan? ttl = null);
    void Invalidate(string queryHash);
    void InvalidateAll();
}

新增 Analysis/MemoryAnalysisCache.cs

public class MemoryAnalysisCache : IAnalysisCache
{
    private readonly IMemoryCache _cache;
    private readonly TimeSpan _defaultTtl = TimeSpan.FromMinutes(5);
    // 包裝 Microsoft.Extensions.Caching.Memory
}

整合

  • AnalysisQueryEngine 建構子接受 IAnalysisCache?(optional)
  • 執行前查快取 → 命中直接回傳 → 未命中則執行並存入
  • _AnalysisController 透過 DI 注入
  • FrameworkServiceExtension.AddWtmContext() 中註冊 IAnalysisCacheMemoryAnalysisCache

配置

  • TTL 預設 5 分鐘,可透過 openclaw.jsonappsettings.json 設定
  • Phase 3 可換 Redis 實作,不動 Engine

驗證

  • Mock IMemoryCache 測試:命中、未命中、過期、手動失效
  • 整合測試:同一查詢第二次不觸發 DB

複雜度

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High priorityanalysis-modeAnalysis Mode featureenhancementNew feature or requestin-progressWork currently in progressperformancePerformance improvementphase-2Phase 2 roadmap

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions