import time from collections import OrderedDict class MessageDeduplicator: MAX_SIZE = 10000 TTL_SECONDS = 300 def __init__(self, max_size: int = MAX_SIZE, ttl: int = TTL_SECONDS): self._cache: OrderedDict[str, float] = OrderedDict() self._max_size = max_size self._ttl = ttl def is_duplicate(self, msg_id: str) -> bool: if not msg_id: return False self._evict_expired() if msg_id in self._cache: return True self._cache[msg_id] = time.time() self._cache.move_to_end(msg_id) while len(self._cache) > self._max_size: self._cache.popitem(last=False) return False def _evict_expired(self): now = time.time() expired = [ k for k, ts in self._cache.items() if now - ts > self._ttl ] for k in expired: del self._cache[k] def reset(self): self._cache.clear()