封装一个给 .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年+ 资深研发老鸟,是软件项目管理师,也是快乐的程序猿,持续免费分享全栈实用编程技巧、项目管理经验和职场成长心得。欢迎关注老杨的公众号,相互交流,共同进步!


相关文章
|
7月前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
1713 2
|
7月前
|
开发框架 安全 .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,系统可同时安装多个版本,确保软件兼容运行。
1744 0
Microsoft .NET Framework 3.5、4.5.2、4.8.1,适用于 Windows 版本的 .NET,Microsoft C Runtime等下载
|
8月前
|
C++
提示缺少.NET Framework 3.5 安装错误:0x80070002、0x800F0950\0x80004002
.NET Framework常见问题及解决方法汇总,
972 0
|
9月前
.NET Framework 3.5离线安装包合集下载
本文介绍了如何获取和安装.NET Framework运行库离线合集包。用户可通过提供的链接下载安装包,安装过程简单,按提示逐步操作即可完成。安装时可选择所需版本,工具会自动适配架构,无需手动判断,方便高效。
7018 0
|
10月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
3143 0
|
10月前
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
1026 1
|
10月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
1312 0
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
1091 0