封装一个给 .NET Framework 用的内存缓存帮助类

简介: 封装一个给 .NET Framework 用的内存缓存帮助类

前言

.NET Core 中已经内置了内存缓存相关的类和操作方法,直接就能使用,非常方便。但在 .NET Framework 中,如果想要使用内存缓存,需要自己进行封装。本文分享一个我自己项目中封装的内存缓存帮助类,有需要的童鞋可以拿去根据自己的实际业务修改修改,应用到自己的项目中。

代码

  1. 封装内存缓存类 CacheUtil
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Caching;
using System.Text;
using System.Threading.Tasks;
namespace Common.Util
{
  public static class CacheUtil
  {
  /// <summary>
  /// <para>获取预定的缓存的过期时间</para>
  /// <para>单位:小时</para>
  /// </summary>
  /// <returns></returns>
  public static int GetCacheExpirationTime()
  {
    // 默认过期时间是 2 小时
    int expiration = 2;
    
    // 从外部获取预定的缓存过期时间,如果有值,则将默认的过期时间改为外部设置的过期时间
    string cacheFile = Path.Combine(FileUtil.GetAppHomeBinPath(), "CacheExpiration.txt");
    Logger.DebugFormat("The cache expiration setting file is [{0}]", cacheFile);
    if (File.Exists(cacheFile))
    {
    using (StreamReader sr = new StreamReader(new FileStream(cacheFile, FileMode.Open, FileAccess.Read)))
    {
      var readBody = sr.ReadToEnd();
      int outExpiration = CommonUtil.GetObjTranNull<int>(readBody);
      if (outExpiration > 0) expiration = outExpiration;
    }
    }
    Logger.DebugFormat("The cache expiration setting is [{0}] hours", expiration);
    return expiration;
  }
  /// <summary>
  /// Set cache
  /// </summary>
  /// <param name="key"></param>
  /// <param name="obj"></param>
  /// <param name="expiration"></param>
  public static void Set(string key, object obj, int expiration)
  {
    var cache = MemoryCache.Default;
    var policy = new CacheItemPolicy
    {
    AbsoluteExpiration = DateTime.Now.AddHours(expiration)
    };
    cache.Set(key, obj, policy);
  }
  /// <summary>
  /// Get cach value by key
  /// </summary>
  /// <typeparam name="T"></typeparam>
  /// <param name="key"></param>
  /// <returns></returns>
  public static T Get<T>(string key)
  {
    try
    {
    var cache = MemoryCache.Default;
    var cacheVal = cache[key];
    return CommonUtil.GetObjTranNull<T>(cacheVal);
    }
    catch (Exception ex)
    {
    BDNALog.BDNALogger.DEFAULT.Warn("Error occurred when getting cache value: ", ex);
    return default(T);
    }
  }
  /// <summary>
  /// Check whether the cache item is exists by key
  /// </summary>
  /// <param name="key"></param>
  /// <returns></returns>
  public static bool IsKeyExists(string key)
  {
    var cache = MemoryCache.Default;
    return cache.Contains(key);
  }
  }
}
  1. 使用
// 1. 判断缓存在不在
if (!CacheUtil.IsKeyExists("isNonInteractiveUser"))
{
  
}
// 2. 获取缓存的值
string val = CacheUtil.Get<string>("isNonInteractiveUser");
// 3. 设置缓存的值
bool isNonInteractiveUser = true;
int expiration = CacheUtil.GetCacheExpirationTime();
CacheUtil.Set("isNonInteractiveUser", isNonInteractiveUser, expiration);

总结

使用这个封装好的内存缓存类,就可以方便地在 .NET Framework 中操作内存缓存了。

我是老杨,一个执着于编程乐趣、至今奋斗在一线的 10年+ 资深研发老鸟,是软件项目管理师,也是快乐的程序猿,持续免费分享全栈实用编程技巧、项目管理经验和职场成长心得。欢迎关注老杨的公众号,相互交流,共同进步!


相关文章
|
8月前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
1825 2
|
8月前
|
开发框架 安全 .NET
Microsoft .NET Framework 3.5、4.5.2、4.8.1,适用于 Windows 版本的 .NET,Microsoft C Runtime等下载
.NET Framework是Windows平台的开发框架,包含CLR和FCL,支持多种语言开发桌面、Web应用。常用版本有3.5、4.5.2、4.8.1,系统可同时安装多个版本,确保软件兼容运行。
1883 0
Microsoft .NET Framework 3.5、4.5.2、4.8.1,适用于 Windows 版本的 .NET,Microsoft C Runtime等下载
|
9月前
|
C++
提示缺少.NET Framework 3.5 安装错误:0x80070002、0x800F0950\0x80004002
.NET Framework常见问题及解决方法汇总,
1038 0
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
876 0
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
717 5
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
442 7
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
376 0
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
370 0
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
518 0