수색…
소개
캐싱은 쉽게 액세스 할 수있는 데이터 복사본을 유지함으로써 애플리케이션의 성능을 향상시키는 데 도움이됩니다. 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; } }