Что должно храниться в значении кэша для одного ключа и как избежать двух обращений к словарю?

Обычно значение кеша содержит результат, а для TTL ещё и срок истечения. Чтобы не делать отдельно проверку наличия и чтение, используйте get() с уникальным sentinel либо обработку KeyError.

Короткий ответ

Что ответить на собеседовании

Обычно значение кеша содержит результат, а для TTL ещё и срок истечения. Чтобы не делать отдельно проверку наличия и чтение, используйте get() с уникальным sentinel либо обработку KeyError.

Подробный разбор

Ответ с пояснениями

Обычно значение кеша содержит результат, а для TTL ещё и срок истечения. Чтобы не делать отдельно проверку наличия и чтение, используйте get() с уникальным sentinel либо обработку KeyError.

missing = object()
entry = cache.get(key, missing)
if entry is not missing:
    value, expires_at = entry  # пример TTL-записи

Sentinel отличает промах от корректного None. Для TTL сравнивайте срок с монотонными часами и удаляйте просроченную запись по правилам кеша. Один поиск в словаре не делает составную операцию конкурентно безопасной: при нескольких исполнителях отдельно решают гонку между промахом и записью результата.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее