MATIH Platform is in active MVP development. Documentation reflects current implementation status.
9. Query Engine & SQL
Caching
Configuration

Cache Configuration Reference

The complete cache configuration is managed via the CacheConfig class, bound to the query.cache prefix in application.yml.


Full Configuration

query:
  cache:
    # Global toggle
    enabled: true
 
    # L1: In-memory cache (Caffeine)
    l1:
      enabled: true
      max-entries: 1000
      max-size-mb: 256
      ttl: PT10M              # 10 minutes
      expire-after-access: PT5M  # 5 minutes idle expiry
 
    # L2: Distributed cache (Redis)
    l2:
      enabled: true
      key-prefix: "query:cache:"
      ttl: PT1H               # 1 hour
      max-entry-size-mb: 50
      compression-threshold-kb: 100
      compression-enabled: true
 
    # Cache warming
    warming:
      enabled: true
      cron-expression: "0 0 6 * * ?"
      max-queries-per-run: 100
      min-hit-count: 5
      lookback-period: P7D
      delay-between-queries: PT1S
 
    # Cache invalidation
    invalidation:
      dependency-based-enabled: true
      event-based-enabled: true
      event-topic: "query-cache-invalidation"
      auto-invalidate-patterns: []
      batch-size: 100
 
    # Metrics
    metrics:
      enabled: true
      publish-interval: PT30S
      per-tenant-metrics: true
      per-query-type-metrics: true

Configuration Properties Reference

Global

PropertyTypeDefaultDescription
query.cache.enabledbooleantrueMaster toggle for all caching

L1 (Caffeine)

PropertyTypeDefaultDescription
query.cache.l1.enabledbooleantrueEnable in-memory cache
query.cache.l1.max-entriesint1000Max entries before size-based eviction
query.cache.l1.max-size-mbint256Max total cache size in megabytes
query.cache.l1.ttlDurationPT10MTime-to-live after write
query.cache.l1.expire-after-accessDurationPT5MIdle expiration time

L2 (Redis)

PropertyTypeDefaultDescription
query.cache.l2.enabledbooleantrueEnable Redis cache
query.cache.l2.key-prefixStringquery:cache:Redis key prefix for namespacing
query.cache.l2.ttlDurationPT1HTime-to-live in Redis
query.cache.l2.max-entry-size-mbint50Skip caching entries larger than this
query.cache.l2.compression-threshold-kbint100GZIP compress entries above this size
query.cache.l2.compression-enabledbooleantrueEnable GZIP compression

Warming

PropertyTypeDefaultDescription
query.cache.warming.enabledbooleantrueEnable scheduled warming
query.cache.warming.cron-expressionString0 0 6 * * ?Cron schedule (daily at 6 AM)
query.cache.warming.max-queries-per-runint100Max queries to warm per cycle
query.cache.warming.min-hit-countint5Min hit count to qualify for warming
query.cache.warming.lookback-periodDurationP7DHistorical period for popularity analysis
query.cache.warming.delay-between-queriesDurationPT1SThrottle delay between warming queries

Invalidation

PropertyTypeDefaultDescription
query.cache.invalidation.dependency-based-enabledbooleantrueTrack and invalidate by table dependency
query.cache.invalidation.event-based-enabledbooleantrueListen for Kafka invalidation events
query.cache.invalidation.event-topicStringquery-cache-invalidationKafka topic name
query.cache.invalidation.batch-sizeint100Batch size for bulk invalidation

Metrics

PropertyTypeDefaultDescription
query.cache.metrics.enabledbooleantrueEnable detailed cache metrics
query.cache.metrics.publish-intervalDurationPT30SMetrics publishing interval
query.cache.metrics.per-tenant-metricsbooleantrueEmit per-tenant cache metrics
query.cache.metrics.per-query-type-metricsbooleantrueEmit per-query-type metrics

Environment-Specific Overrides

Development

query:
  cache:
    l1:
      max-size-mb: 64
      ttl: PT2M
    l2:
      ttl: PT15M
    warming:
      enabled: false

Production

query:
  cache:
    l1:
      max-size-mb: 512
      max-entries: 5000
      ttl: PT15M
    l2:
      ttl: PT2H
      max-entry-size-mb: 100
    warming:
      max-queries-per-run: 500
      min-hit-count: 10