В компьютерном мире кеш — это аппаратное или программное обеспечение, которое используется для временного хранения данных. Давайте узнаем больше о том, когда используется кеш, как работает кеширование и о различных типах кешей.

Что такое кеш?

Для начала давайте убедимся, что мы правильно произносим слово — НАЛИЧНЫЕ. Хорошо, теперь, когда мы это прояснили, давайте перейдем к более интересным вещам.

Ой! Еще кое-что. Возможно, самое важное, что вы можете вынести из этой статьи, заключается в следующем: основная цель кэша — сократить время доступа к данным.

Я обещаю, что вскоре объясню, как это делает кеш, но сначала позвольте мне использовать аналогию, чтобы проиллюстрировать, что такое кеш. Это потребует вашего воображения 🙂

Давайте представим мир, в котором каждый раз, когда нам нужно принять душ, нам сначала придется совершить специальную поездку в супермаркет, чтобы купить все необходимое мыло и шампунь. Также мы можем получить только ту сумму, которой хватило бы только на один душ. В этом воображаемом мире нет таких вещей, как бутылки из-под шампуня или куски мыла. Звучит как-то неудобно, да? 🙁

К счастью, мы живем в мире бутылок с шампунем! Бутылки из-под шампуня позволяют нам хранить на месте то, что нам нужно для принятия душа! Нам не нужно ходить в магазин каждый раз, когда мы принимаем душ!

Это кэширование в двух словах. Кэш — это легкодоступный носитель, который используется для хранения часто используемых данных из основного хранилища данных. Итак, в аналогии бутылка шампуня представляла тайник. Без кэширования клиенту пришлось бы снова и снова отправлять одни и те же запросы данных в основное хранилище данных. Эти запросы будут занимать больше времени, потому что запрос должен пройти весь путь до основного хранилища данных, а затем ответ должен вернуться обратно к клиенту. Это все равно, что ходить в супермаркет за шампунем каждый раз, когда вам нужно принять душ.

Похоже, кэширование — гораздо более удобное и более чистое решение 🙂

Как работает кеш

При кэшировании для каждого запроса клиент сначала проверяет кеш. Если данные находятся в кеше, то это попадание в кеш. Если данных нет в кеше, то это промах кеша. Затем запрос будет отправлен в основное хранилище данных и извлечен оттуда. Извлеченные данные затем будут скопированы в кеш для дальнейшего использования. После того, как данные сохранены в кэше, они будут продолжать доставляться из кэша до тех пор, пока не истечет срок их действия или не будут очищены.

Инвалидация кеша

Вы могли заметить, что данные копируются из основного хранилища данных в кеш. Вы можете спросить: «Ну, а что происходит, когда данные на сервере меняются? Как кеш узнает?». Именно здесь вступает в действие аннулирование кеша. Используются три основные схемы: сквозная запись, циклическая запись и обратная запись.

Кэш со сквозной записью

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

Кэш с круговой записью

В этой схеме данные записываются непосредственно в основное хранилище данных, а не в кэш. Преимущество этого в том, что кэшу не придется обрабатывать большое количество запросов на запись, которые не будут перечитаны. Недостатком является то, что запрос на чтение недавно записанных данных приведет к промаху кэша, и вместо этого запрос на чтение будет отправлен в основное хранилище данных. Это приведет к более высокой задержке операций чтения.

Кэш обратной записи

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

Типы тайников

Кэш-сервер

Кэш-сервер — это выделенный сервер, который кэширует веб-ресурсы. Эти кэши используются в сетях доставки контента (CDN) или веб-прокси. Кэш-серверы могут храниться в разных географических точках, поэтому запрос клиента и ответ хранилища данных не должны перемещаться так далеко.

Кэш браузера

Веб-браузеры могут хранить данные в своем локальном кеше, поэтому данные не нужно извлекать с сервера для каждого отправляемого запроса. Это помогает сократить задержку.

Кэш памяти

Кэш памяти — это механизм кэширования, фактически являющийся частью компьютера. Компьютер может принимать часто запрашиваемые данные и сохранять определенные части данных в статической ОЗУ (SRAM). Доступ к данным из SRAM происходит быстрее, чем компьютер, имеющий доступ к ним с жесткого диска.

Кэш диска

Кэш диска аналогичен кешу памяти. Единственная разница с дисковым кешем заключается в том, что память сохраняется не в SRAM, а в RAM.

Политики вытеснения кэша

Политики вытеснения кэша — это инструкции по обслуживанию каждого кэша. В список ниже включены наиболее часто используемые, но более подробный список можно посмотреть здесь.

  • Наименее часто используемые (LFU): подсчитывает, как часто требуется элемент. В первую очередь отбрасываются те, которые используются реже всего.
  • Последние использованные (MRU): сначала отбрасываются самые последние использованные элементы.
  • Наименее недавно использовавшиеся (LRU): в первую очередь отбрасываются наименее использовавшиеся элементы.
  • First In First Out (FIFO): кэш сначала удаляет блок, к которому был получен доступ первым. Неважно, как часто или сколько раз к этому блоку обращались раньше.
  • Последним пришел — первым вышел (LIFO). Кэш сначала вытесняет блок, к которому последний раз обращались. Неважно, как часто или сколько раз к блоку обращались раньше.

Первоначально опубликовано на https://www.danielleskosky.com 1 августа 2020 г.