"""TTL 캐시 — 프로세스 메모리에만 있다.""" import time from typing import Any, Optional _store: dict[str, tuple[float, Any]] = {} _MAX_KEYS = 500 def get(key: str) -> Optional[Any]: hit = _store.get(key) if not hit: return None if time.monotonic() >= hit[0]: _store.pop(key, None) return None return hit[1] def put(key: str, value: Any, ttl_sec: float) -> None: # 만료된 것부터 버리고, 그래도 넘치면 가장 먼저 만료될 것을 버린다. if len(_store) >= _MAX_KEYS: now = time.monotonic() for k in [k for k, (exp, _) in _store.items() if exp <= now]: _store.pop(k, None) if len(_store) >= _MAX_KEYS: _store.pop(min(_store, key=lambda k: _store[k][0]), None) _store[key] = (time.monotonic() + ttl_sec, value) def clear() -> None: _store.clear()