수색…


소개

캐싱은 쉽게 액세스 할 수있는 데이터 복사본을 유지함으로써 애플리케이션의 성능을 향상시키는 데 도움이됩니다. Aspnet Core 에는 두 가지 사용하기 쉽고 친숙한 캐싱 추상화가 있습니다.

메모리 캐시 는 로컬 서버의 메모리 캐싱에 데이터를 저장합니다.

분산 캐시 는 클러스터 내의 서버가 액세스 할 수있는 중앙 위치에 데이터 캐시를 보관합니다. 3 가지 구현 방식 즉, 메모리 (단위 테스트 및 로컬 개발 용), Redis 및 Sql Server.

ASP.NET 핵심 응용 프로그램에서 InMemory 캐시 사용

ASP.NET 응용 프로그램에서 메모리 캐시를 사용하려면 project.json 파일에 다음 종속성을 추가하십시오.

  "Microsoft.Extensions.Caching.Memory": "1.0.0-rc2-final",

Startup 클래스의 ConfigureServices 메서드에 캐시 서비스 (Microsoft.Extensions.Caching.Memory에서) 추가

services.AddMemoryCache();

애플리케이션의 캐시에 항목을 추가하려면 아래에 표시된 것처럼 어떤 클래스 (예 : Controller) 에나 삽입 할 수있는 IMemoryCache 를 사용합니다.

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