🤹♂️ Что такое кэширование? 🚶♀️

Иметь вещи в кармане во время прогулок — обычное дело, как и иметь кэшированные данные во время работы приложений 🚶♀️🚶♂️💽💻.

Удерживаясь от желания крикнуть в экран «Cache me outside… how boww daah», позвольте мне объяснить вам, что такое кэширование для меня. Я также упомяну различные типы, с которыми вы можете столкнуться, их плюсы и минусы. Это исключительно моя точка зрения, она также содержит пару советов о том, как начать кэширование в .NET.

Определение

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

…Или, как выражается Microsoft: «Кэширование позволяет хранить данные в памяти для быстрого доступа к ним. Когда к данным обращаются снова, приложения могут получить данные из кэша вместо того, чтобы извлекать их из первоисточника». — Кэширование в приложениях .NET framework

В моей собственной голове я всегда вижу это как вещь, которая лежит у вас в кармане, пока кто-то не попросит ее снова, а вы тем временем можете идти и заниматься своей повседневной жизнью, пока эта «вещь» живет у вас в кармане, пока она снова не понадобится.

Это может быть полезно:

  • Улучшает производительность и масштабируемость (не нужно так сильно забивать источник).
  • Может сделать данные доступными, когда источник недоступен.
  • «Кэширование лучше всего работает с данными, которые меняются нечасто и дорого генерируются» — Кэширование в памяти в asp.net core

Придержите лошадей

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

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

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

  • Кэширование в памяти (или в процессе) (Кэш хранится в памяти веб-сервера, очень прост в реализации).
  • Распределенное кэширование (кэш разделяется между несколькими серверами).

Основные различия между ними можно увидеть по этой ссылке.

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

Мое личное мнение

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

Как использовать кэширование в памяти в .NET?

  1. Установите пакет nuget «Microsoft.Extensions.Caching.Memory
  2. Инициализируйте объект MemoryCache с аргументом доступа options (т.е. MemoryCacheOptions).
  3. Обычно это будет выглядеть следующим образом: выборка или установка:
if (!memoryCache.TryGetValue("cachedThingIdOrName", out List<int> data)) 
{
    data = memoryCache.Set("cachedThingIdOrName", await GetLargeDatabaseList(), new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromSeconds(10)); 
} 

return data; 
Войти в полноэкранный режим Выйти из полноэкранного режима

Его также можно внедрить с помощью этого:

  • При запуске добавьте следующее: services.AddMemoryCache().
  • Теперь в любом конструкторе вы можете просто инжектировать IMemoryCache и он может быть использован

Как кэшировать с помощью Redis (локальная разработка)

  • Мы можем использовать контейнер docker для получения/размещения последнего образа Redis.
  • После запуска Redis нам нужно загрузить пакет microsoft.extensions.caching.stackexchangeredis.
  • Нам также нужно загрузить пакет Stackexchange.Redis.
  • Перейдите к методу ConfigureServices и добавьте метод расширения AddStackExchangeRedisCache со следующими параметрами выражения:
      • Это получает строку подключения /конфигурацию, используемую для подключения к установленному Redis.
      • Это просто предупреждение, которое может быть использовано для предотвращения любой потенциальной путаницы при вставке значения с одним и тем же ключом в нескольких приложениях. Помните, что Redis может быть общим для различных экземпляров и приложений в целом, поэтому может быть более вероятным, что имена ключей будут перемешаны. Это изолирует все, что установлено в этом приложении, только для этого приложения.
    • Вставьте IDistributedCache в конструктор как обычно и используйте

Важно отметить, что всегда нужно использовать форму истечения срока действия, иначе данные останутся в кэше навсегда. Можно использовать AbsoluteExpirationRelativeToNow или AbsoluteExpiration или SlidingExpiration.

Спасибо, что остались, увидимся на следующей 🙌

Оцените статью
Procodings.ru
Добавить комментарий