집 >백엔드 개발 >C#.Net 튜토리얼 >MemoryCache 문제 해결 솔루션
이 글에서는 .NET Core 2.0 마이그레이션 팁과 메모리 캐시 문제 복구 및 해결 방법에 대한 정보를 주로 소개합니다. 샘플 코드를 통해 자세히 소개합니다. 모든 사람의 학습이나 업무에 필요한 참고 자료입니다. 친구 여러분, 편집자를 따라와 함께 배워보세요.
머리말
기존 .NET Framework 프로젝트의 경우 System.Runtime.Caching
네임스페이스가 일반적으로 사용되는 도구이며 그 중 MemoryCache 클래스가 자주 사용된다는 점을 누구나 알아야 합니다. 메모리 캐싱을 구현합니다. System.Runtime.Caching
命名空间是常用的工具了,其中MemoryCache类则常被用于实现内存缓存。
.NET Core 2.0暂时还不支持System.Runtime.Caching dll,这也就意味着MemoryCache相关代码不再起作用了。
但是好消息是,我们可以使用.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默认实现的MemoryCache类,以及全新的内存缓存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
Solution
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) }); } } } }🎜 가져오고 나면 VS에서
System.Runtime을 찾을 수 없다는 메시지가 표시됩니다. 캐싱
네임스페이스로 인해 원본 코드를 직접 컴파일하여 사용할 수 없습니다. 🎜 🎜🎜2. 기본적으로 .NET Core에서 구현되는 MemoryCache 클래스와 새로운 메모리 캐시 API🎜🎜🎜🎜를 제공하는 Microsoft.Extensions.Caching.Memory
네임스페이스에 대한 참조를 추가합니다. rrreee🎜3 .코드를 다시 작성하고 새 API를 사용하여 메모리 캐시 기능을 구현합니다🎜🎜캐시 객체 초기화 방법을 다시 작성하기 전: 🎜🎜🎜🎜rrreee🎜캐시 객체 초기화 방법을 다시 작성한 후: 🎜🎜🎜🎜 rrreee🎜메모리 캐시 값 읽는 방법 변경: 🎜🎜 🎜🎜rrreee🎜다시 쓰기 후: 🎜🎜🎜🎜rrreee🎜메모리 캐시 내용 방법 설정 변경: 🎜🎜🎜🎜rrreee🎜수정 후: 🎜🎜🎜 🎜 rrreee🎜🎜🎜결론🎜🎜🎜 🎜🎜 사용 Microsoft.Extensions.Caching.Memory
아래의 새 API가 이전 코드를 다시 작성한 후에는 모든 원래 메모리 캐시 시간 제한 전략에 해당하는 새 API가 있음을 알 수 있습니다. AbsoluteExpiration, SlidingExpiration 등을 포함합니다. 🎜🎜그래서 우리는 새로운 .NET Core API를 쉽게 사용하여 간단한 변경만으로 기존 코드 대부분을 재사용하고 마이그레이션하여 계속 작업할 수 있습니다. 🎜🎜🎜🎜마이그레이션 후의 전체 코드는 다음과 같습니다. 🎜🎜🎜🎜🎜🎜rrreee
위 내용은 MemoryCache 문제 해결 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!