How It Works Pricing Benchmarks
vs Redis Docs Resources Blog
Start Free Trial
New Primitive

What Did Your Cache Serve
at 3 AM?

Now you can answer that. GET user:123 AT 2026-03-27T03:00:00 returns the exact value that was cached at that timestamp. Debug production incidents, satisfy compliance auditors, and compare cache state across time.

Time-Travel
Queries
Configurable
Retention
Compliance
Audit Trail
Zero
Read Overhead
The Problem

Your Cache Has Amnesia

Every cache overwrites on SET. The previous value is gone forever. That means you cannot debug, cannot audit, and cannot prove what happened. Three problems, one root cause: no version history.

🐛
Production Bugs Are Cache Bugs
40% of production incidents involve stale or incorrect cached data. Without version history, you cannot prove what the cache served when the bug happened. Post-mortem debugging is guesswork. You know the user saw wrong data. You cannot prove when the cache started serving it, what the previous value was, or which write caused the corruption.
40% of incidents involve stale cache data
📋
Auditors Ask Questions You Can't Answer
SOC 2, FINRA, HIPAA auditors want to know: "Can you prove what data was served to users at time X?" Today the answer is no. The cache overwrites history on every write. With temporal versioning, the answer is yes — with cryptographic proof. Every version is timestamped, attributed to a writer, and queryable at any historical point.
Auditors require proof you cannot currently provide
🧪
A/B Testing Cache Behavior
Comparing cache behavior across time windows — before and after a deploy, before and after a config change — requires version history. Was the cache serving correct data before the deploy but stale data after? Did a config change cause a key to stop updating? Currently impossible to answer. With temporal versioning, one DIFF command shows exactly what changed.
Before/after comparison requires version history
How It Works

Git for Your Cache. Query Any Point in Time.

Every write appends a new version with a timestamp. The version chain is queryable. You can look up what a key held at any moment, view the full history, and diff between two points in time.

# Time-travel query: what was user:123 at 3 AM? GET user:123 AT 2026-03-27T03:00:00 # Returns: {"name":"Alice","plan":"enterprise","last_login":"2026-03-26T22:14:00"} # Full version timeline for a key HISTORY user:123 # Returns: # v5 2026-03-27T04:12:00 SET writer:api-server-3 {"name":"Alice","plan":"pro",...} # v4 2026-03-27T03:45:00 SET writer:api-server-1 {"name":"Alice","plan":"enterprise",...} # v3 2026-03-27T02:30:00 SET writer:api-server-2 {"name":"Alice","plan":"enterprise",...} # v2 2026-03-26T23:00:00 SET writer:api-server-1 {"name":"Alice","plan":"startup",...} # v1 2026-03-26T18:00:00 SET writer:api-server-1 {"name":"Alice","plan":"startup",...} # Diff between two time points DIFF user:123 2026-03-27T02:00:00 2026-03-27T04:00:00 # Returns: 2 versions changed, plan: "startup" -> "enterprise" # Count total versions retained for a key VERSIONS user:123 # Returns: 5
Version Timeline — user:123
2026-03-27T04:12:00
v5 (current) — plan changed to "pro"
SET by api-server-3
2026-03-27T03:45:00
v4 — plan: "enterprise", last_login updated
SET by api-server-1
2026-03-27T02:30:00
v3 — plan: "enterprise"
SET by api-server-2
2026-03-26T23:00:00
v2 — plan upgraded to "startup"
SET by api-server-1
2026-03-26T18:00:00
v1 — initial write, plan: "free"
SET by api-server-1
Query Behavior
GET user:123 AT 03:00 → returns v3 (enterprise)
Binary search on the version chain. Returns the version that was active at the requested timestamp.

Append-Only, Never Destructive

Every SET appends a new version to the key's version chain. Previous values are never overwritten. The version chain is an append-only log indexed by timestamp. This means the cache is a complete record of every value a key has ever held, within the retention window.

Each version entry stores: the value, the timestamp, the writer ID (which server or service wrote it), and the operation type (SET, DEL, CDC update). This metadata is what makes debugging and auditing possible.

Zero Read-Path Overhead

A standard GET returns the current (latest) value with zero additional latency. The version chain is only traversed when you explicitly use a time-travel query (GET key AT timestamp), which adds approximately 0.5 microseconds for a binary search on the version chain.

Write overhead is a single append to the version chain — the same cost as any other linked-list prepend. Version management and garbage collection happen on a background thread, never on the hot path.

Retention

Configurable Retention. Per Key Prefix.

Different data has different retention requirements. Hot operational data needs hours. Compliance data needs months. Audit-critical data needs indefinite retention. Configure retention per key prefix, and the garbage collector handles the rest.

# Default retention: 24 hours CONFIG SET temporal.retention.default 24h # Compliance data: 90 days CONFIG SET temporal.retention.prefix:audit 90d # Financial transaction records: 7 years (archived to cold storage) CONFIG SET temporal.retention.prefix:txn 2555d # Hot session data: 1 hour (minimal retention) CONFIG SET temporal.retention.prefix:session 1h
Data Category Key Prefix Example Retention Storage Tier
Hot operational session:* 1–24 hours RAM
Application state user:* 7 days RAM + NVMe
Compliance data audit:* 30–90 days NVMe + Cold Archive
Audit-critical txn:* Indefinite Cold Archive

Memory Math

10M keys × 24 versions/day × 1KB average value = 240GB/day of version data. This is where hybrid tiering composes naturally with temporal versioning: current and recent versions stay in RAM for sub-microsecond access, older versions move to NVMe, and compliance-retention versions archive to cold storage automatically. The garbage collector respects retention policies and reclaims expired versions without blocking reads or writes.

Use Cases

What You Can Do With Version History

🔍
Debugging: The 3 AM Incident
PagerDuty fires at 3:14 AM. Users report seeing wrong pricing. By 3:30 AM, the bug is fixed, but now the post-mortem: what did the cache actually serve? GET pricing:enterprise AT 2026-03-27T03:00:00 returns the exact cached value. HISTORY pricing:enterprise shows when the bad value was written and which server wrote it. Root cause in minutes, not days.
Root cause analysis in minutes
Compliance: Prove Data Accuracy
SOC 2 auditor asks: "Show me that user data was correctly cached on March 15th." You run GET user:456 AT 2026-03-15T12:00:00 and return the exact value with a cryptographic timestamp. The auditor gets verifiable proof. No hand-waving, no log parsing, no "we think it was correct."
Verifiable proof for SOC 2 / FINRA / HIPAA
📊
A/B Testing: Before and After
You deployed a new caching strategy at 2 PM. Hit rates look different. DIFF popular:items 2026-03-27T13:00:00 2026-03-27T15:00:00 shows exactly how cache values changed across the deploy window. Was the new strategy caching different data? More stale data? Less data? Now you can see instead of guessing.
Compare cache behavior across deploys
🛡
Forensics: Cache Poisoning Detection
Was the cache poisoned? When? What values were injected? HISTORY sensitive:key shows every write, every writer, every timestamp. If an unauthorized writer injected a value at 2:47 AM, the version history proves it. Combined with self-healing, Cachee can detect the anomaly and automatically revert to the last known-good version.
Complete forensic record of every write
Composition

Composes With Everything

Temporal versioning is not a standalone feature. It multiplies the value of every other Cachee primitive. Each composition creates behavior that no other caching system can replicate.

🧬
Temporal + Self-Healing
Self-healing detects anomalous cache values and corrects them automatically. Temporal versioning shows when the poisoning started by comparing the version timeline. Together: detect the anomaly, identify the exact version where corruption began, and revert to the last known-good version — all automatically, all auditable.
Detect, trace, and auto-revert poisoned values
📜
Temporal + Cache Contracts
Cache contracts enforce value invariants at write time. Temporal versioning proves contract compliance at any historical point. An auditor asks: "Was the pricing data valid on March 15th?" You query the version at that timestamp and verify it against the contract. Compliance proof becomes a single API call, not a multi-week investigation.
Prove contract compliance at any historical point
💾
Temporal + Hybrid Tiering
Hybrid tiering manages data across RAM, NVMe, and cold storage based on access patterns. Temporal versioning generates version data that tiers naturally: current versions in RAM, recent versions on NVMe, and compliance-retention versions in cold archive. The tiering engine handles promotion and demotion automatically.
Version data tiers automatically across storage

Learn more about self-healing cache, cache contracts, and hybrid tiering — and how these primitives compose into a system that is debuggable, auditable, and provably correct.

A cache without version history is a cache you can't debug.
A cache with temporal versioning is infrastructure you can trust in a post-mortem.
FAQ

Frequently Asked Questions

What is temporal versioning for a cache?

Temporal versioning maintains a timestamped version history for every cache key. Instead of overwriting values on each SET, the cache appends a new version with a timestamp. You can then query any key's value at any historical point in time using GET key AT timestamp, view the full version timeline with HISTORY key, or compare changes between two points with DIFF key t1 t2.

Does temporal versioning add latency to normal GET operations?

No. A standard GET command returns the current (latest) value with zero additional overhead. Only time-travel queries (GET key AT timestamp) incur extra latency — approximately 0.5 microseconds for a binary search on the version chain. The version history is maintained as a background append-only structure that does not affect the hot read path.

How does retention work?

Retention is configurable per key prefix. You can set different retention periods for different categories of data: 1–24 hours for hot operational data, 30–90 days for compliance data, and indefinite retention for audit-critical keys (archived to cold storage). A background garbage collector automatically removes versions that exceed the retention period without blocking reads or writes.

How does this help with compliance audits?

SOC 2, FINRA, and HIPAA auditors frequently ask: "Can you prove what data was served to users at time X?" With temporal versioning, you answer that question definitively. GET key AT timestamp returns the exact value. Combined with Cachee's cryptographic attestation, you get an independently verifiable proof of cache state at any historical point.

How much memory does it use?

Each version entry adds 32 bytes of metadata (pointer, timestamp, writer ID, operation type). The value payload is stored separately. For 10M keys with 24 versions per day and 1KB average value size, that is approximately 240GB per day of version data. Cachee composes temporal versioning with hybrid tiering: current and recent versions stay in RAM, older versions move to NVMe, and compliance-retention versions archive to cold storage automatically.

Stop Guessing What Your Cache Served.
Start Querying It.

Temporal versioning. Time-travel queries. Configurable retention. Compliance-grade audit trails. Git for your cache.

Start Free Trial Schedule Demo