asp.net-core
Кэширование
Поиск…
Вступление
Кэширование помогает улучшить производительность приложения, поддерживая легкодоступную копию данных. Aspnet Core поставляется с двумя простыми в использовании и тестируемыми дружественными кэширующими абстракциями.
Кэш памяти будет хранить данные в кешировании на локальном сервере.
Распределенный кэш будет хранить кеш данных в централизованном местоположении, доступном для серверов в кластере. Он поставляется с тремя реализациями из коробки: в памяти (для модульного тестирования и локальных разработчиков), Redis и Sql Server.
Использование кеша InMemory в приложении ASP.NET Core
Чтобы использовать кеш в памяти в приложении ASP.NET, добавьте следующие зависимости в файл project.json
:
"Microsoft.Extensions.Caching.Memory": "1.0.0-rc2-final",
добавьте службу кэширования (из Microsoft.Extensions.Caching.Memory) в метод ConfigureServices в классе Startup
services.AddMemoryCache();
Чтобы добавить элементы в кеш в нашем приложении, мы будем использовать IMemoryCache
который может быть IMemoryCache
в любой класс (например, Controller), как показано ниже.
private IMemoryCache _memoryCache;
public HomeController(IMemoryCache memoryCache)
{
_memoryCache = memoryCache;
}
Get вернет значение, если оно существует, но в противном случае возвращает null
.
// try to get the cached item; null if not found
// greeting = _memoryCache.Get(cacheKey) as string;
// alternately, TryGet returns true if the cache entry was found
if(!_memoryCache.TryGetValue(cacheKey, out greeting))
Используйте метод Set для записи в кеш. Set принимает ключ, используемый для поиска значения, кэшируемого значения и набора MemoryCacheEntryOptions
. MemoryCacheEntryOptions
позволяет указать абсолютное или скользящее время окончания кэша по времени, приоритет кеширования, обратные вызовы и зависимости. Один из примеров ниже -
_memoryCache.Set(cacheKey, greeting,
new MemoryCacheEntryOptions()
.SetAbsoluteExpiration(TimeSpan.FromMinutes(1)));
Распределенное кэширование
Чтобы использовать распределенный кеш, вам необходимо обратиться к одной из доступных реализаций:
Например, вы зарегистрируете реализацию Redis следующим образом:
public void ConfigureServices(IServiceCollection services)
{
services.AddDistributedRedisCache(options =>
{
options.Configuration = "ServerAdress";
options.InstanceName = "InstanceName";
});
}
Требовать зависимость IDistributedCache
где она вам нужна:
public class BooksController { private IDistributedCache distributedCache; public BooksController(IDistributedCache distributedCache) { this.distributedCache = distributedCache; } [HttpGet] public async Task<Books[]> GetAllBooks() { var serialized = this.distributedCache.GetStringAsync($"allbooks"); Books[] books = null; if (string.IsNullOrEmpty(serialized)) { books = await Books.FetchAllAsync(); this.distributedCache.SetStringAsync($"allbooks", JsonConvert.SerializeObject(books)); } else { books = JsonConvert.DeserializeObject<Books[]>(serialized); } return books; } }