C# 如何实现一个简单的缓存 - MemoryCache的使用
发布时间 - 2026-01-14 00:00:00 点击率:次MemoryCache 是 .NET 内置内存缓存,适用于单进程场景;需在 .NET Core+ 中安装 System.Runtime.Caching 包;支持相对/绝对/滑动过期及移除回调;重启后数据丢失,不支持分布式共享。
在 C# 开发中,为了提升性能,避免重复计算或频繁访问数据库、远程服务,我们常常需要使用缓存。.NET 提供了一个内置的内存缓存实现 —— MemoryCache,它位于 System.Runtime.Caching 命名空间下,适用于桌面应用(如 WPF、Windows Service)和 ASP.NET 应用。
启用 M
emoryCache
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("缓存未命中"); }
设置缓存过期策略
你可以更灵活地控制缓存的生命周期,例如使用相对过期时间或绝对过期时间。
- 相对过期:从添加时刻起,一段时间后失效。
- 绝对过期:指定一个具体的时间点失效。
示例:
// 相对过期: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 虽然简单,但足够应对大多数内存缓存场景,尤其适合中小型项目或不需要分布式缓存的情况。注意它只保存在当前进程内存中,重启即丢失,不适用于多服务器部署的共享缓存需求。
# c#
# windows
# 工具
# ai
# win
# 数据丢失
# .net
# 分布式
# 命名空间
# 封装
# 数据库
# wpf
# 移除
# 回调
# 适用于
# 重启
# 是一个
# 分钟后
# 你可以
# 已被
# 但在
# 自定义
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JavaScript如何实现继承_有哪些常用方法
使用豆包 AI 辅助进行简单网页 HTML 结构设计
详解Android图表 MPAndroidChart折线图
Python3.6正式版新特性预览
郑州企业网站制作公司,郑州招聘网站有哪些?
网站制作价目表怎么做,珍爱网婚介费用多少?
如何在宝塔面板中创建新站点?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
如何在建站主机中优化服务器配置?
如何快速搭建支持数据库操作的智能建站平台?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
Python面向对象测试方法_mock解析【教程】
桂林网站制作公司有哪些,桂林马拉松怎么报名?
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
如何构建满足综合性能需求的优质建站方案?
JavaScript如何实现类型判断_typeof和instanceof有什么区别
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
Laravel如何为API生成Swagger或OpenAPI文档
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
如何用AI帮你把自己的生活经历写成一个有趣的故事?
如何在万网自助建站平台快速创建网站?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
电商网站制作价格怎么算,网上拍卖流程以及规则?
利用vue写todolist单页应用
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何在云虚拟主机上快速搭建个人网站?
Laravel如何实现API版本控制_Laravel版本化API设计方案
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
Laravel如何记录自定义日志?(Log频道配置)
使用C语言编写圣诞表白程序
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
音乐网站服务器如何优化API响应速度?
如何快速生成凡客建站的专业级图册?
如何用wdcp快速搭建高效网站?
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
网站制作软件有哪些,制图软件有哪些?
Laravel如何实现API速率限制?(Rate Limiting教程)
在centOS 7安装mysql 5.7的详细教程
大连 网站制作,大连天途有线官网?
黑客如何利用漏洞与弱口令入侵网站服务器?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
Python正则表达式进阶教程_复杂匹配与分组替换解析
昵图网官网入口 昵图网素材平台官方入口
Laravel如何实现全文搜索功能?(Scout和Algolia示例)


emoryCache