37 lines
871 B
Python
37 lines
871 B
Python
"""内存缓存,支持 TTL 过期"""
|
|
|
|
import time
|
|
from typing import Any
|
|
|
|
|
|
class MemoryCache:
|
|
def __init__(self):
|
|
self._store: dict[str, tuple[Any, float]] = {}
|
|
|
|
def get(self, key: str) -> Any | None:
|
|
if key not in self._store:
|
|
return None
|
|
value, expire_at = self._store[key]
|
|
if time.time() > expire_at:
|
|
del self._store[key]
|
|
return None
|
|
return value
|
|
|
|
def set(self, key: str, value: Any, ttl: int = 300):
|
|
self._store[key] = (value, time.time() + ttl)
|
|
|
|
def delete(self, key: str):
|
|
self._store.pop(key, None)
|
|
|
|
def clear(self):
|
|
self._store.clear()
|
|
|
|
def cleanup(self):
|
|
now = time.time()
|
|
expired = [k for k, (_, exp) in self._store.items() if now > exp]
|
|
for k in expired:
|
|
del self._store[k]
|
|
|
|
|
|
cache = MemoryCache()
|