Полное руководство по кэшированию в Python

Исчерпывающее руководство по кэшированию в Python

Как работает кэширование и способы кэширования функций

Фото от Nana Smirnova на Unsplash

Когда одним и тем же аргументом вызывается функция несколько раз, это приводит к повторному вычислению. Мемоизация полезна в таких ситуациях, когда результаты вызовов функций могут быть “сохранены” для будущего использования. Это позволяет сэкономить время и оптимизировать код, поскольку код становится менее ресурсоемким в вычислительном отношении. Кэширование – более общий термин, используемый для хранения любых данных.

В этой статье будут рассмотрены различные стратегии кэширования, вопросы, связанные с кэшированием, а также способы включения и реализации разных типов кэширования для ваших скриптов (с использованием пакета Python и вашей реализации)!

Содержание

Типы кэширования

Существует несколько стратегий кэширования в зависимости от ваших потребностей:

  • Наименее недавно использованный (LRU): удаляет наименее недавно использованные данные, наиболее распространенный тип кэширования
  • Наименее часто использованный (LFU): удаляет наименее часто используемые данные
  • Сначала вошедший, первый вышедший (FIFO): удаляет самые старые данные
  • Последний вошедший, первый вышедший (LIFO): удаляет самые новые данные
  • Наиболее недавно использованный (MRU): удаляет наиболее недавно использованные данные
  • Случайная замена (RR): удаляет случайно выбранные данные

Соображения, связанные с кэшированием

При использовании кэширования в ваших приложениях стоит учесть занимаемую память кэша, так как он хранит дополнительную информацию. Если вы выбираете между различными реализациями с точки зрения архитектуры и структур данных, следует учесть несколько временных аспектов, таких как:

  • Время доступа: для аргументов, которые уже были вычислены ранее, результаты должны быть доступны быстро в O(1) времени
  • Время вставки: для новых аргументов данные должны быть вставлены в кэш, желательно в O(1) времени (в зависимости от реализации, некоторые могут занимать O(n) времени, выбирайте мудро!)
  • Время удаления: В случае…