Files
sub-provider/app/services/cache.py
riglen 0d49398e2d init
2026-03-31 15:51:18 +08:00

31 lines
737 B
Python

from __future__ import annotations
import time
from dataclasses import dataclass
from typing import Generic, TypeVar
T = TypeVar("T")
@dataclass
class CacheItem(Generic[T]):
value: T
expires_at: float
class TTLCache(Generic[T]):
def __init__(self) -> None:
self._store: dict[str, CacheItem[T]] = {}
def get(self, key: str) -> T | None:
item = self._store.get(key)
if item is None:
return None
if item.expires_at < time.time():
self._store.pop(key, None)
return None
return item.value
def set(self, key: str, value: T, ttl_seconds: int) -> None:
self._store[key] = CacheItem(value=value, expires_at=time.time() + ttl_seconds)