Поиск…


Вступление

Кэширование помогает улучшить производительность приложения, поддерживая легкодоступную копию данных. 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;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow