全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

前言

大家应该都知道,对于传统的.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  # memorycache  # asp.net  # core  # 迁移  # .NET Core系列之MemoryCache 初识  # 你会发现  # 是有  # 就能  # 说了  # 还不  # 不多  # 将其  # 这也  # 写了  # 可以使用  # 这篇文章  # 谢谢大家  # 不兼容  # 使用了  # 就意味着  # 有疑问  # pre  # class  # brush  # span 


相关文章: 如何在IIS中新建站点并解决端口绑定冲突?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  ,南京靠谱的征婚网站?  python的本地网站制作,如何创建本地站点?  非常酷的网站设计制作软件,酷培ai教育官方网站?  如何快速使用云服务器搭建个人网站?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  青岛网站建设如何选择本地服务器?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  C++如何编写函数模板?(泛型编程入门)  如何快速上传自定义模板至建站之星?  如何选择高效响应式自助建站源码系统?  建站三合一如何选?哪家性价比更高?  如何快速搭建响应式可视化网站?  建站之星免费版是否永久可用?  网站制作说明怎么写,简述网页设计的流程并说明原因?  如何快速启动建站代理加盟业务?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  高端建站三要素:定制模板、企业官网与响应式设计优化  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  建站之星如何助力网站排名飙升?揭秘高效技巧  如何在景安云服务器上绑定域名并配置虚拟主机?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  建站之家VIP精选网站模板与SEO优化教程整合指南  韩国服务器如何优化跨境访问实现高效连接?  个人网站制作流程图片大全,个人网站如何注销?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  如何在服务器上配置二级域名建站?  建站主机选虚拟主机还是云服务器更好?  如何通过NAT技术实现内网高效建站?  如何高效完成自助建站业务培训?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  建站之星收费标准详解:套餐费用及年费价格表一览  如何快速生成橙子建站落地页链接?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  江苏网站制作公司有哪些,江苏书法考级官方网站?  英语简历制作免费网站推荐,如何将简历翻译成英文?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  建站主机如何选?高性价比方案全解析  制作网站的软件免费下载,免费制作app哪个平台好?  已有域名如何免费搭建网站?  潮流网站制作头像软件下载,适合母子的网名有哪些?  php json中文编码为null的解决办法  如何快速搭建高效可靠的建站解决方案?  如何续费美橙建站之星域名及服务?  Python如何创建带属性的XML节点  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。