0

0

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

月夜之吻

月夜之吻

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

|

990人浏览过

|

来源于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;

// 获取默认的缓存实例 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("缓存未命中"); }

设置缓存过期策略

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

多奥淘宝客程序API免费版 F8.0
多奥淘宝客程序API免费版 F8.0

多奥淘宝客程序免费版拥有淘宝客站点的基本功能,手动更新少,管理简单等优点,适合刚接触网站的淘客们,或者是兼职做淘客们。同样拥有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 虽然简单,但足够应对大多数内存缓存场景,尤其适合中小型项目或不需要分布式缓存的情况。注意它只保存在当前进程内存中,重启即丢失,不适用于多服务器部署的共享缓存需求。

相关专题

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

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

323

2023.08.11

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

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

231

2023.10.07

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

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

576

2023.07.26

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

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

1095

2023.07.27

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

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

790

2023.08.01

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

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

452

2023.08.02

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

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

2347

2023.08.08

windows自动更新
windows自动更新

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

776

2023.08.10

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

2

2026.01.14

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MongoDB 教程
MongoDB 教程

共17课时 | 2万人学习

XML教程
XML教程

共142课时 | 5.6万人学习

php-src源码分析探索
php-src源码分析探索

共6课时 | 0.5万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号