# Caching

> A design pattern that stores the result of an expensive read or computation under a key derived from every input it depends on, and serves it again while that key matches.

Record: `architecture:caching`
Kind: pattern
Layer: [Performance Core](https://banes-lab.com/records/layer/performance-core.md)
Severity: contextual
Scope: data access, computation, API
Canonical: https://banes-lab.com/ontology#architecture-caching

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Partitioning](https://banes-lab.com/records/architecture/partitioning.md) and before [Statelessness](https://banes-lab.com/records/architecture/statelessness.md).

## Repair

- Refactored by: Add Cache, Key by Input Fingerprint, Define Invalidation
- Detected by: hot repeated reads, high latency calls
- Violated by: repeated expensive computation/query with stable result
- Measured by: hit ratio, stale read rate
- Enforced by: performance tests

## Requires

- [Invalidation Policy](https://banes-lab.com/records/lexicon/invalidation-policy.md)

## Reinforces

- [Latency Reduction](https://banes-lab.com/records/lexicon/latency-reduction.md)
- [Scalability](https://banes-lab.com/records/architecture/scalability.md)

## Enables

- [Reduced Load](https://banes-lab.com/records/lexicon/reduced-load.md)

## Conflicts with

- [Cache Poisoning by Design](https://banes-lab.com/records/architecture/cache-poisoning-by-design.md)

## In tension with

- [Consistency](https://banes-lab.com/records/architecture/consistency.md)
- [Always-Fresh Reads](https://banes-lab.com/records/lexicon/always-fresh-reads.md)

## Tensions

- [Caching / Consistency](https://banes-lab.com/records/tension/caching-consistency.md)
- [Caching / Always-Fresh Reads](https://banes-lab.com/records/tension/always-fresh-reads-caching.md)

## Severity

- [contextual](https://banes-lab.com/records/vocabulary/severity-contextual.md)

## Category

- [Scalability / Performance / Optimization](https://banes-lab.com/records/architecture-category/scalability-performance-optimization.md)

## Enforced by

- [rules/eslint/require-cache-coverage.eslint.rule.ts](https://banes-lab.com/source/governance/rules/eslint/require-cache-coverage.eslint.rule.ts.md)

## Reinforced by

- [CDN / Edge Caching](https://banes-lab.com/records/architecture/cdn-edge-caching.md)

## Linked from

- [Computation and resource](https://banes-lab.com/software-architecture/principles/computation-and-resource.md)
- [Anti-patterns](https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.md)
- [Scalability / Performance / Optimization](https://banes-lab.com/ontology/principles/architecture-category-scalability-performance-optimization.md)
- [Transactions / State / Concurrency](https://banes-lab.com/ontology/principles/architecture-category-transactions-state-concurrency.md)
- [Scalability / Performance / Optimization](https://banes-lab.com/ontology/lexicon/lexicon-category-scalability-performance-optimization.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)

## Evidence in the code

- [diagramDigest](https://banes-lab.com/source/tree/core/analyzers/diagram.analyzer.ts.md)
