.NET Core 2.0 이전 팁 의 Memory Cache 문제 복구 해결 방법

머리말
전통 적 인.NET Framework 프로젝트 에 있어 서System.Runtime.Caching네 임 스페이스 는 자주 사용 되 는 도구 이 고 그 중에서 Memory Cache 류 는 메모리 캐 시 를 실현 하 는 데 자주 사용 된다 는 것 을 잘 알 고 있 을 것 이다.
.NET Core 2.0 은 아직 System.Runtime.Catching dll 을 지원 하지 않 는 다 는 것 은 Memory Cache 관련 코드 가 더 이상 작 동 하지 않 는 다 는 것 을 의미한다.
그러나 좋 은 소식 은.NET Core 2.0 의 새로운 API 를 사용 하여 메모리 캐 시 기능 을 실현 하고 코드 를 간단하게 수정 하여 호 환 되 지 않 는 문 제 를 해결 할 수 있다 는 것 이다.다음은 더 이상 할 말 이 없 으 니 상세 한 소 개 를 해 봅 시다.
해결 방안
1.오래된 코드 를 항목 에 가 져 옵 니 다.다음 과 같 습 니 다.

using System;
using System.Runtime.Caching;

namespace TestWebApp.Service
{
 public class MemoryCacheService
 {
  static ObjectCache cache = MemoryCache.Default;
  /// <summary>
  ///      
  /// </summary>
  /// <param name="key"></param>
  /// <returns></returns>
  private object GetCacheValue(string key)
  {
   if (key != null && cache.Contains(key))
   {
    return cache[key];
   }
   return default(object);
  }
  /// <summary>
  ///       
  /// </summary>
  /// <param name="key"></param>
  /// <param name="value"></param>
  public static void SetChacheValue(string key, object value)
  {
   if (key != null)
   {
    CacheItemPolicy policy = new CacheItemPolicy
    {
     SlidingExpiration = TimeSpan.FromHours(1)
     
    };
    cache.Set(key, value, policy);
   }
  }
 }
}
가 져 오 면 VS 가 네 임 스페이스 를 찾 을 수 없 음 을 알려 줍 니 다System.Runtime.Caching.기 존 코드 는 직접 컴 파일 할 수 없습니다.

2.Microsoft.Extensions.Caching.Memory네 임 스페이스 에 대한 인용 을 추가 합 니 다.이 는.NET Core 가 기본적으로 구현 하 는 Memory Cache 류 와 새로운 메모리 캐 시 API 를 제공 합 니 다.

using Microsoft.Extensions.Caching.Memory;
3.코드 를 바 꾸 고 새로운 API 를 사용 하여 메모리 캐 시 기능 을 실현 합 니 다.
캐 시 대상 방식 초기 화

static ObjectCache cache = MemoryCache.Default;
캐 시 대상 방식 초기 화 후:

static MemoryCache cache = new MemoryCache(new MemoryCacheOptions());
메모리 캐 시 값 읽 기 방식 변화:

private object GetCacheValue(string key)
{
 if (key != null && cache.Contains(key))
 {
  return cache[key];
 }
 return default(object);
}
고 쳐 쓴 후:

private object GetCacheValue(string key)
{
 object val = null;
 if (key != null && cache.TryGetValue(key, out val))
 {
  return val;
 }
 else
 {
  return default(object);
 }
}
메모리 캐 시 내용 변경 설정:

public static void SetChacheValue(string key, object value)
{
 if (key != null)
 {
  CacheItemPolicy policy = new CacheItemPolicy
  {
   SlidingExpiration = TimeSpan.FromHours(1)
  };
  cache.Set(key, value, policy);
 }
}
수정 후:

public static void SetChacheValue(string key, object value)
{
 if (key != null)
 {
  cache.Set(key, value, new MemoryCacheEntryOptions
  {
   SlidingExpiration = TimeSpan.FromHours(1)
  });
 }
}
결론.Microsoft.Extensions.Caching.Memory의 새 API 를 사용 하여 오래된 코드 를 바 꾼 후에 기 존의 각종 메모리 캐 시 시간 초과 정책 은 모두 새로운 API 에 대응 하 는 것 을 발견 할 수 있 습 니 다.AbsoluteExpiration,Sliding Expiration 등 을 포함 합 니 다.
그래서 우 리 는.NET Core 의 새로운 API 를 쉽게 사용 할 수 있 습 니 다.간단하게 변경 하면 기 존의 대부분의 오래된 코드 를 다시 사용 하여 이 를 옮 겨 서 계속 역할 을 할 수 있 습 니 다.
이전 후의 전체 코드 는 다음 과 같다.

using Microsoft.Extensions.Caching.Memory;
using System;

namespace TestMemoryCacheWebApp.Services
{
 public class MemoryCacheService
 {
  static MemoryCache cache = new MemoryCache(new MemoryCacheOptions());
  /// <summary>
  ///      
  /// </summary>
  /// <param name="key"></param>
  /// <returns></returns>
  private object GetCacheValue(string key)
  {
   object val = null;
   if (key != null && cache.TryGetValue(key, out val))
   {

    return val;
   }
   else
   {
    return default(object);
   }
  }
  /// <summary>
  ///       
  /// </summary>
  /// <param name="key"></param>
  /// <param name="value"></param>
  public static void SetChacheValue(string key, object value)
  {
   if (key != null)
   {
    cache.Set(key, value, new MemoryCacheEntryOptions
    {
     SlidingExpiration = TimeSpan.FromHours(1)
    });
   }
  }
 }
}
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기