Cache invalidation — removing stale data from cache.
1const redis = require("redis").createClient();23// Strategy 1: TTL-based4async function cacheWithTTL(key, fetchFn, ttl = 300) {5 let data = await redis.get(key);6 if (data) return JSON.parse(data);78 data = await fetchFn();9 await redis.setEx(key, ttl, JSON.stringify(data));10 return data;11}1213// Strategy 2: Write-through14async function updateUser(id, updates) {15 const user = await db.updateUser(id, updates);16 await redis.setEx(`user:${id}`, 3600, JSON.stringify(user));17 return user;18}1920// Strategy 3: Tag-based invalidation21async function invalidateByTag(tag) {22 const keys = await redis.smembers(`tag:${tag}`);23 if (keys.length) {24 await redis.del(...keys);25 await redis.del(`tag:${tag}`);26 }27}2829async function cacheWithTag(key, fetchFn, tags, ttl = 300) {30 const data = await cacheWithTTL(key, fetchFn, ttl);31 for (const tag of tags) {32 await redis.sadd(`tag:${tag}`, key);33 }34 return data;35}3637// Invalidate all product caches38await invalidateByTag("products");
Strategies: