Простой in-memory кэш с TTL
Python
Senior
Авито
01.01.2025
Реализуйте класс `TTLCache`, который хранит ключ-значение с временем жизни (TTL, seconds).
Требования:
1. Метод `set(key, value, ttl_seconds)` — устанавливает значение.
2. Метод `get(key)` — возвращает значение или `None`, если ключ отсутствует или истёк по времени.
Можно использовать модуль `time`.
Ответы
Решение 1
```python
import time
from typing import Any, Dict, Tuple
class TTLCache:
def __init__(self) -> None:
# key -> (value, expire_ts)
self._data: Dict[Any, Tuple[Any, float]] = {}
def set(self, key: Any, value: Any, ttl_seconds: float) -> None:
expire_at = time.time() + ttl_seconds
self._data[key] = (value, expire_at)
def get(self, key: Any) -> Any | None:
item = self._data.get(key)
if item is None:
return None
value, expire_at = item
if time.time() > expire_at:
self._data.pop(key, None)
return None
return value
```