最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

.NET Core 2.0迁移小技巧之MemoryCache问题修复解决的方法

来源:懂视网 责编:小采 时间:2020-11-27 22:35:24
文档

.NET Core 2.0迁移小技巧之MemoryCache问题修复解决的方法

.NET Core 2.0迁移小技巧之MemoryCache问题修复解决的方法:前言 大家应该都知道,对于传统的.NET Framework项目而言,System.Runtime.Caching命名空间是常用的工具了,其中MemoryCache类则常被用于实现内存缓存。 .NET Core 2.0暂时还不支持System.Runtime.Caching dll,这也就意味着Memor
推荐度:
导读.NET Core 2.0迁移小技巧之MemoryCache问题修复解决的方法:前言 大家应该都知道,对于传统的.NET Framework项目而言,System.Runtime.Caching命名空间是常用的工具了,其中MemoryCache类则常被用于实现内存缓存。 .NET Core 2.0暂时还不支持System.Runtime.Caching dll,这也就意味着Memor

前言

大家应该都知道,对于传统的.NET Framework项目而言,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下的新API改写了旧代码后,你会发现原有的各种内存缓存超时策略全都是有对应新API的,包括AbsoluteExpiration, SlidingExpiration等等。

所以我们还是可以很轻松的使用.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)
 });
 }
 }
 }
}

总结

文档

.NET Core 2.0迁移小技巧之MemoryCache问题修复解决的方法

.NET Core 2.0迁移小技巧之MemoryCache问题修复解决的方法:前言 大家应该都知道,对于传统的.NET Framework项目而言,System.Runtime.Caching命名空间是常用的工具了,其中MemoryCache类则常被用于实现内存缓存。 .NET Core 2.0暂时还不支持System.Runtime.Caching dll,这也就意味着Memor
推荐度:
标签: 2.0 net 2.0的
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top