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


相关文章
|
3天前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
|
2月前
|
存储 开发框架 .NET
"揭秘.NET内存奥秘:从CIL深处窥探值类型与引用类型的生死较量,一场关于速度与空间的激情大戏!"
【8月更文挑战第16天】在.NET框架中,通过CIL(公共中间语言)可以深入了解值类型与引用类型的内存分配机制。值类型如`int`和`double`直接在方法调用堆栈上分配,访问迅速,生命周期随栈帧销毁而结束。引用类型如`string`在托管堆上分配,堆栈上仅存储引用,CLR负责垃圾回收,确保高效且自动化的内存管理。
52 6
|
2天前
|
存储 缓存 API
LangChain-18 Caching 将回答内容进行缓存 可在内存中或数据库中持久化缓存
LangChain-18 Caching 将回答内容进行缓存 可在内存中或数据库中持久化缓存
15 6
|
4天前
|
存储 编译器 C++
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作(二)
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作
|
3天前
|
API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
10 0
|
4天前
|
存储 编译器 C++
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作(三)
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作
|
4天前
|
存储 编译器 C++
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作(一)
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作
|
1月前
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
|
2月前
|
存储 程序员 Python
Python类的定义_类和对象的关系_对象的内存模型
通过类的定义来创建对象,我们可以应用面向对象编程(OOP)的原则,例如封装、继承和多态,这些原则帮助程序员构建可复用的代码和模块化的系统。Python语言支持这样的OOP特性,使其成为强大而灵活的编程语言,适用于各种软件开发项目。
20 1

热门文章

最新文章