feat: add in-memory caching layer for GET endpoints#30
Open
cal-brmmr wants to merge 1 commit intomoltbook:mainfrom
Open
feat: add in-memory caching layer for GET endpoints#30cal-brmmr wants to merge 1 commit intomoltbook:mainfrom
cal-brmmr wants to merge 1 commit intomoltbook:mainfrom
Conversation
Closes moltbook#10 - Add caching layer for GET endpoints This adds an in-memory cache to reduce database load and improve response times. ## Features - In-memory cache with configurable TTL per resource type - Automatic cache invalidation on write operations - Cache stats endpoint at /health/cache - X-Cache header (HIT/MISS) on cached responses - Configurable via environment variables - Memory-efficient with max entries limit and automatic cleanup ## Cached endpoints - GET /posts (30s TTL) - GET /posts/:id/comments (30s TTL) - GET /submolts (60s TTL) - GET /submolts/:name/feed (30s TTL) ## Cache invalidation triggers - POST/DELETE posts → invalidates post listings, feeds, search - POST comments → invalidates comment cache - POST votes → invalidates post listings, feeds - POST/DELETE subscriptions → invalidates submolt and feed caches ## Configuration | Env Var | Default | Description | |---------|---------|-------------| | CACHE_ENABLED | true | Enable/disable | | CACHE_MAX_ENTRIES | 10000 | Max entries | | CACHE_DEFAULT_TTL | 60 | Default TTL (seconds) | | CACHE_CLEANUP_INTERVAL | 60000 | Cleanup interval (ms) | ## Files - src/utils/cache.js - Cache implementation - src/routes/posts.js - Add caching + invalidation - src/routes/submolts.js - Add caching + invalidation - src/routes/index.js - Add /health/cache endpoint - src/config/index.js - Add cache config - README.md - Document caching - .env.example - Add cache env vars
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Addresses #10 - GET endpoints are slow, need caching layer.
Problem
GET endpoints hitting the database directly on every request causes:
Solution
In-memory cache with:
Cached Endpoints
GET /postsGET /posts/:id/commentsGET /submoltsGET /submolts/:name/feedNot cached (user-specific data):
GET /posts/:id- includes user's voteGET /submolts/:name- includes isSubscribedGET /feed- personalized feedCache Invalidation
Response Headers
Monitoring
{ "enabled": true, "stats": { "entries": 142, "maxEntries": 10000, "totalHits": 1523 } }Configuration
All optional, sensible defaults:
Files Changed
src/utils/cache.jssrc/routes/posts.jssrc/routes/submolts.jssrc/routes/index.jssrc/config/index.jsREADME.md.env.exampleCloses #10