Обычно значение кеша содержит результат, а для 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 сравнивайте срок с монотонными часами и удаляйте просроченную запись по правилам кеша. Один поиск в словаре не делает составную операцию конкурентно безопасной: при нескольких исполнителях отдельно решают гонку между промахом и записью результата.