···
34
-
// write cascades down
35
-
await storage.set('user:123', { name: 'Alice' })
34
+
// critical file: keep in memory for instant serving
35
+
await storage.set('site:abc/index.html', indexHtml)
38
-
const user = await storage.get('user:123')
37
+
// big files: skip hot, let them live in warm + cold
38
+
await storage.set('site:abc/video.mp4', videoData, { skipTiers: ['hot'] })
39
+
await storage.set('site:abc/hero.png', imageData, { skipTiers: ['hot'] })
40
-
// see where it came from
41
-
const result = await storage.getWithMetadata('user:123')
42
-
console.log(result.source) // 'hot', 'warm', or 'cold'
41
+
// on read, bubbles up from wherever it lives
42
+
const result = await storage.getWithMetadata('site:abc/index.html')
43
+
console.log(result.source) // 'hot' - served from memory
45
-
await storage.invalidate('user:')
45
+
const video = await storage.getWithMetadata('site:abc/video.mp4')
46
+
console.log(video.source) // 'warm' - served from disk, never touches memory
49
+
await storage.invalidate('site:abc/')
52
+
Hot tier stays small and fast. Warm tier has everything. Cold tier is the source of truth.
···
getStats(): Promise<TierStats>
170
-
Don't want big videos in memory? Skip hot:
173
-
await storage.set('video.mp4', data, { skipTiers: ['hot'] })