MemoryCache 是 .NET 内置内存缓存,适用于单进程场景;需在 .NET Core+ 中安装 System.Runtime.Caching 包;支持相对/绝对/滑动过期及移除回调;重启后数据丢失,不支持分布式共享。

在 C# 开发中,为了提升性能,避免重复计算或频繁访问数据库、远程服务,我们常常需要使用缓存。.NET 提供了一个内置的内存缓存实现 —— MemoryCache,它位于 System.Runtime.Caching 命名空间下,适用于桌面应用(如 WPF、Windows Service)和 ASP.NET 应用。
启用 MemoryCache
MemoryCache 是 .NET Framework 4.0+ 自带的组件,在 .NET Framework 项目中可直接使用。但在 .NET Core 或 .NET 5+ 中,你需要先安装 NuGet 包:
Install-Package System.Runtime.Caching这个包在大多数现代项目中默认已包含。
基本使用方法
下面是一个简单的 MemoryCache 使用示例:
using System; using System.Runtime.Caching;// 获取默认的缓存实例 ObjectCache cache = MemoryCache.Default;
// 添加一个字符串到缓存,10分钟后过期 cache.Set("username", "zhangsan", DateTimeOffset.Now.AddMinutes(10));
// 从缓存读取数据 string username = cache.Get("username") as string; if (username != null) { Console.WriteLine($"缓存命中: {username}"); } else { Console.WriteLine("缓存未命中"); }
设置缓存过期策略
你可以更灵活地控制缓存的生命周期,例如使用相对过期时间或绝对过期时间。
多奥淘宝客程序免费版拥有淘宝客站点的基本功能,手动更新少,管理简单等优点,适合刚接触网站的淘客们,或者是兼职做淘客们。同样拥有VIP版的模板引擎技 术、强大的文件缓存机制,但没有VIP版的伪原创跟自定义URL等多项创新的搜索引擎优化技术,除此之外也是一款高效的API数据系统实现无人值守全自动 化运行的淘宝客网站程序。4月3日淘宝联盟重新开放淘宝API申请,新用户也可使用了
- 相对过期:从添加时刻起,一段时间后失效。
- 绝对过期:指定一个具体的时间点失效。
示例:
// 相对过期:20分钟后过期
cache.Set("data1", "value1", TimeSpan.FromMinutes(20));
// 绝对过期:指定具体时间
cache.Set("data2", "value2", new CacheItemPolicy
{
AbsoluteExpiration = DateTimeOffset.Now.AddHours(1)
});
高级用法:自定义缓存策略
通过 CacheItemPolicy 可以设置更多选项,比如滑动过期、依赖文件、缓存移除回调等。
cache.Set("report", GenerateReport(), new CacheItemPolicy
{
// 滑动过期:如果10分钟内被访问,则自动延长
SlidingExpiration = TimeSpan.FromMinutes(10),
// 缓存被移除时触发回调
RemovedCallback = args =>
{
Console.WriteLine($"缓存项 {args.Key} 已被移除,原因: {args.RemovedReason}");
}
});
封装成通用缓存帮助类
为了方便在项目中复用,可以封装一个简单的缓存工具类:
public class SimpleCacheService
{
private readonly ObjectCache _cache = MemoryCache.Default;
public T Get(string key)
{
return (T)_cache.Get(key);
}
public void Set(string key, object value, TimeSpan expiration)
{
_cache.Set(key, value, DateTimeOffset.Now.Add(expiration));
}
public bool Contains(string key)
{
return _cache.Contains(key);
}
public void Remove(string key)
{
if (_cache.Contains(key))
{
_cache.Remove(key);
}
}
}
使用方式:
var cacheService = new SimpleCacheService();
cacheService.Set("time", DateTime.Now, TimeSpan.FromMinutes(5));
var time = cacheService.Get("time");
基本上就这些。MemoryCache 虽然简单,但足够应对大多数内存缓存场景,尤其适合中小型项目或不需要分布式缓存的情况。注意它只保存在当前进程内存中,重启即丢失,不适用于多服务器部署的共享缓存需求。









