mirror of
https://github.com/fosrl/pangolin.git
synced 2026-01-29 06:10:47 +00:00
- Add maxKeys limit (10,000) to NodeCache to prevent unbounded memory growth - Skip caching undefined values when GeoIP/ASN lookups fail (e.g., when MaxMind DB not configured) - Add periodic cache statistics logging every 5 minutes for monitoring - Fixes memory leak where cache would grow indefinitely with high request volumes The maxKeys limit uses LRU eviction, so oldest entries are automatically removed when the limit is reached. With ~10k requests/day and 5min TTL, 10k keys provides ample headroom while preventing OOM issues. Fixes #2120
21 lines
689 B
TypeScript
21 lines
689 B
TypeScript
import NodeCache from "node-cache";
|
|
import logger from "@server/logger";
|
|
|
|
// Create cache with maxKeys limit to prevent memory leaks
|
|
// With ~10k requests/day and 5min TTL, 10k keys should be more than sufficient
|
|
export const cache = new NodeCache({
|
|
stdTTL: 3600,
|
|
checkperiod: 120,
|
|
maxKeys: 10000
|
|
});
|
|
|
|
// Log cache statistics periodically for monitoring
|
|
setInterval(() => {
|
|
const stats = cache.getStats();
|
|
logger.debug(
|
|
`Cache stats - Keys: ${stats.keys}, Hits: ${stats.hits}, Misses: ${stats.misses}, Hit rate: ${stats.hits > 0 ? ((stats.hits / (stats.hits + stats.misses)) * 100).toFixed(2) : 0}%`
|
|
);
|
|
}, 300000); // Every 5 minutes
|
|
|
|
export default cache;
|