BuidlZone-Labs/zicket-web

Unbounded In-Memory Cache Class Lacks Eviction & Serverless Persistence

Chiusa

#177 aperta il 29 lug 2026

 (13 commenti) (0 reazioni) (1 assegnatario)TypeScript (43 fork)auto 404
Stellar Wavedifficulty: mediumenhancementhelp wantedperformance

Metriche repository

Star
 (4 stelle)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

Category

Performance

Priority

Medium

Description

lib/cache.ts provides InMemoryCache using a static JS Map. In long-running node processes, key entries accumulate indefinitely without an LRU maximum capacity cap. In serverless deployment environments (Vercel Edge/Lambdas), static Map state is lost between cold starts and isolated per instance.

Evidence from lib/cache.ts#L18-L20:

class InMemoryCache {
  private static store = new Map<string, CacheEntry<unknown>>();
}

Proposed Solution

  1. Add an upper bound on key size and implement LRU (Least Recently Used) cache eviction.
  2. For production deployments, integrate Redis / Upstash or Next.js unstable_cache / fetch cache.

Acceptance Criteria

  • Cache map respects a configurable max capacity (e.g. 500 items).
  • Expired or old items are evicted automatically.
  • No unbounded memory growth.

Files

  • lib/cache.ts
  • lib/dataFetching.ts

Guida contributor