Caching patterns — different strategies for different use cases.
Cache-aside (Lazy Loading):
1async function cacheAside(key, fetchFn, ttl = 300) {2 let data = await redis.get(key);3 if (data) return JSON.parse(data);45 data = await fetchFn();6 await redis.setEx(key, ttl, JSON.stringify(data));7 return data;8}
Write-through:
1async function writeThrough(key, data, ttl = 300) {2 await db.update(key, data);3 await redis.setEx(key, ttl, JSON.stringify(data));4}
Write-behind (Write-back):
1const writeQueue = new Queue("db-writes");23async function writeBehind(key, data) {4 await redis.setEx(key, 300, JSON.stringify(data));5 await writeQueue.add("update", { key, data });6}
Read-through:
1async function readThrough(key, fetchFn, ttl = 300) {2 let data = await redis.get(key);3 if (data) return JSON.parse(data);45 data = await fetchFn();6 await redis.setEx(key, ttl, JSON.stringify(data));7 return data;8}