讲师中心 微信公众号
AI工具推荐 视频效率加速

C# 如何实现一个简单的缓存 - MemoryCache的使用

冬明同学_2418

冬明同学_2418

发布时间:2026-01-14 09:40:02

|

1070人浏览过

|

来源于php中文网

原创

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

c# 如何实现一个简单的缓存 - memorycache的使用

在 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;
<p>// 获取默认的缓存实例
ObjectCache cache = MemoryCache.Default;</p><p>// 添加一个字符串到缓存,10分钟后过期
cache.Set("username", "zhangsan", DateTimeOffset.Now.AddMinutes(10));</p><p>// 从缓存读取数据
string username = cache.Get("username") as string;
if (username != null)
{
Console.WriteLine($"缓存命中: {username}");
}
else
{
Console.WriteLine("缓存未命中");
}

设置缓存过期策略

你可以更灵活地控制缓存的生命周期,例如使用相对过期时间或绝对过期时间。

Windows 图片打印
Windows 图片打印

通过 Python 使用 mspaint /pt 在 Windows 上打印图像——绕过 bash 中文路径编码问题。

下载
  • 相对过期:从添加时刻起,一段时间后失效。
  • 绝对过期:指定一个具体的时间点失效。

示例:

// 相对过期:20分钟后过期
cache.Set("data1", "value1", TimeSpan.FromMinutes(20));
<p>// 绝对过期:指定具体时间
cache.Set("data2", "value2", new CacheItemPolicy
{
AbsoluteExpiration = DateTimeOffset.Now.AddHours(1)
});

高级用法:自定义缓存策略

通过 CacheItemPolicy 可以设置更多选项,比如滑动过期、依赖文件、缓存移除回调等。

cache.Set("report", GenerateReport(), new CacheItemPolicy
{
    // 滑动过期:如果10分钟内被访问,则自动延长
    SlidingExpiration = TimeSpan.FromMinutes(10),
<pre class="brush:php;toolbar:false;">// 缓存被移除时触发回调
RemovedCallback = args =>
{
    Console.WriteLine($"缓存项 {args.Key} 已被移除,原因: {args.RemovedReason}");
}

});

封装成通用缓存帮助类

为了方便在项目中复用,可以封装一个简单的缓存工具类:

public class SimpleCacheService
{
    private readonly ObjectCache _cache = MemoryCache.Default;
<pre class="brush:php;toolbar:false;">public T Get<T>(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<DateTime>("time");

基本上就这些。MemoryCache 虽然简单,但足够应对大多数内存缓存场景,尤其适合中小型项目或不需要分布式缓存的情况。注意它只保存在当前进程内存中,重启即丢失,不适用于多服务器部署的共享缓存需求。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

2153

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

3554

2023.10.07

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3419

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2978

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

1528

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

2699

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3350

2023.08.08

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1697

2023.08.10

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
XORM框架官方中文文档
XORM框架官方中文文档

共0课时 | 0人学习

Docker镜像构建手册
Docker镜像构建手册

共0课时 | 0人学习

Docker Compose使用手册
Docker Compose使用手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn