Реализация кэша в памяти на основе TTL для отслеживания активности macOSPython

Программы на Python
Ответить
Anonymous
 Реализация кэша в памяти на основе TTL для отслеживания активности macOS

Сообщение Anonymous »

Я создаю локальный трекер производительности macOS, который считывает данные из базы данных KnowledgeC системы для анализа времени фокусировки и переключений контекста. Поскольку запрос к этой базе данных SQLite может быть дорогостоящим для агрегирования, я реализовал простой кеш в памяти с TTL.
Контекст: Приложение предоставляет веб-панель, показывающую ежедневные/еженедельные показатели, и пользователи могут часто обновлять данные. Данные не обязательно должны поступать в режиме реального времени (допускается устаревание в 1–2 минуты).
Вот моя реализация кэша только в памяти:

Код: Выделить всё

"""Simple in-memory cache with TTL."""

import time
from dataclasses import dataclass
from typing import Any

@dataclass
class CacheEntry:
"""Cache entry with expiration."""

value: Any
expires_at: float

class InMemoryCache:
"""Simple in-memory cache with TTL expiration."""

def __init__(self, ttl_seconds: int = 60) -> None:
self.ttl_seconds = ttl_seconds
self._cache: dict[str, CacheEntry] = {}

def get(self, key: str) -> Any | None:
"""Get value from cache if not expired."""
entry = self._cache.get(key)
if entry is None:
return None

if time.time() > entry.expires_at:
del self._cache[key]
return None

return entry.value

def set(self, key: str, value: Any) -> None:
"""Set value in cache with TTL."""
expires_at = time.time() + self.ttl_seconds
self._cache[key] = CacheEntry(value=value, expires_at=expires_at)

def clear(self) -> None:
"""Clear all cache entries."""
self._cache.clear()
Мои конкретные проблемы:
  • Не слишком ли упрощенно использование dict с ручной проверкой TTL? Должен ли я использовать инструменты кэширования или аналогичные?
  • Должен ли я добавить кеш L-2 на уровне каталога файлов?
  • Потокобезопасность — приложение FastAPI является асинхронным, но операции с кэшем не блокируются.
  • Управление памятью — нет ограничения максимального размера, только вытеснение на основе TTL.
Полный проект доступен здесь, если нужен дополнительный контекст необходимо, но меня в первую очередь интересуют отзывы об этом подходе к кэшированию.
Текущее поведение:
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»