新闻中心

.NET中的内存缓存(MemoryCache)是什么?如何为应用添加本地缓存?

2025-11-28
浏览次数:
返回列表
MemoryCache是.NET中的进程内缓存机制,通过在应用程序内存中存储数据以提升性能。它属于Microsoft.Extensions.Caching.Memory命名空间,支持ASP.NET Core、控制台应用等多种场景。与分布式缓存不同,MemoryCache仅限当前实例使用,重启后数据丢失,多节点部署时存在不一致性。使用时需先在Program.cs中注册AddMemoryCache()服务,再通过依赖注入IMemoryCache接口进行操作。常用方法包括TryGetValue、Set、Remove以及GetOrCreate。可设置绝对过期或滑动过期策略来控制缓存生命周期,系统还会在内存压力高时自动清理。合理设计缓存键和过期时间可避免脏数据与内存溢出,显著提升应用响应速度。

.net中的内存缓存(memorycache)是什么?如何为应用添加本地缓存?

.NET 中的 MemoryCache 是一个在应用程序运行时将数据存储在内存中的本地缓存机制。它允许你将频繁访问或计算开销较大的数据保存在内存中,从而减少数据库查询、文件读取或远程服务调用的次数,提升应用性能。

MemoryCache 是 .NET Framework 和 .NET Core/.NET 5+ 都支持的功能,属于 Microsoft.Extensions.Caching.Memory 命名空间,适用于 ASP.NET Core、控制台应用、Windows 服务等需要本地缓存的场景。

MemoryCache 的特点

它不是分布式缓存(如 Redis),而是进程内缓存,仅限当前服务器实例使用。这意味着:

  • 速度快,数据直接在内存中读写
  • 重启应用后数据丢失
  • 多服务器部署时各节点缓存不一致
  • 适合存储与当前实例相关的临时数据

如何为应用添加 MemoryCache

以 ASP.NET Core 项目为例,添加和使用 MemoryCache 分为以下几个步骤:

1. 安装依赖包(.NET 6 及以下可能需要)

大多数新版本已内置,但若提示找不到命名空间,可安装:

Microsoft.Extensions.Caching.Memory

2. 在 Program.cs 中注册服务

在依赖注入容器中添加 MemoryCache 支持:

N世界 N世界

一分钟搭建会展元宇宙

N世界 138 查看详情 N世界
var builder = WebApplication.CreateBuilder(args);

// 添加 MemoryCache 服务
builder.Services.AddMemoryCache();

var app = builder.Build();

3. 在控制器或服务中使用 IMemoryCache

通过构造函数注入 IMemoryCache 接口,进行缓存操作:

using Microsoft.Extensions.Caching.Memory;

public class WeatherController : ControllerBase
{
    private readonly IMemoryCache _cache;

    public WeatherController(IMemoryCache cache)
    {
        _cache = cache;
    }

    public IActionResult GetForecast()
    {
        const string cacheKey = "weather_forecast_2025";

        // 尝试从缓存获取数据
        if (!_cache.TryGetValue(cacheKey, out List<WeatherData> forecast))
        {
            // 缓存未命中:生成数据(例如查数据库)
            forecast = GenerateWeatherData();

            // 设置缓存选项
            var cacheEntryOptions = new MemoryCacheEntryOptions()
                .SetAbsoluteExpiration(TimeSpan.FromMinutes(30)) // 30分钟后过期
                .SetSlidingExpiration(TimeSpan.FromMinutes(10)); // 10分钟内访问则延长

            // 写入缓存
            _cache.Set(cacheKey, forecast, cacheEntryOptions);
        }

        return Ok(forecast);
    }
}

4. 常用缓存操作说明

  • TryGetValue:尝试获取缓存项,返回布尔值表示是否存在
  • Set:设置缓存值和过期策略
  • Remove:手动删除某个键的缓存
  • GetOrCreate / GetOrCreateAsync:更简洁的方式,自动处理“获取或创建”逻辑

例如使用 GetOrCreate:

var forecast = _cache.GetOrCreate(cacheKey, entry =>
{
    entry.SetAbsoluteExpiration(TimeSpan.FromMinutes(30));
    return GenerateWeatherData();
});

缓存过期策略建议

合理设置过期时间对缓存有效性至关重要:

  • 绝对过期(Absolute Expiration):固定时间后失效,适合定时更新的数据
  • 滑动过期(Sliding Expiration):每次访问刷新过期时间,适合热点数据
  • 可同时设置两者,系统会取更早触发的条件

MemoryCache 会在内存压力大时自动清理部分条目,因此不能依赖其长期保存数据。

基本上就这些。只要注册服务并注入接口,就能快速为应用加上本地缓存能力,显著提升响应速度。关键是根据业务选择合适的缓存键和过期策略,避免脏数据或内存溢出。

以上就是.NET中的内存缓存(MemoryCache)是什么?如何为应用添加本地缓存?的详细内容,更多请关注其它相关文章!


# 应用程序  # 延庆区大型网站建设风格  # 正规网站建设课程总结  # 菏泽seo抖音系统  # 广州全网seo推广  # 网站怎么建设推广平台呢  # 陕西网站建设哪家好  # 从化外贸整合营销推广  # 秦皇岛大型网站建设调试  # 湖南专业网站建设哪个好  # 表白网站建设素材库  # 就能  # 有哪些  # 是一个  # 客户端  # redis  # 如何实现  # 重启  # 仅限  # 何为  # 2025  # red  # .net  # 数据丢失  # 热点  # microsoft  # win  # app  # windows 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 解决Python单元测试中Mock异常方法调用计数为零的问题  Node.js 中使用 node-cron 实现定时 API 数据抓取与处理  如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单  mc.js游戏直达 mc.js网页免下载版本秒进地址  新手怎么开始学化妆 零基础化妆入门教程  12306怎么选座位选到安静区_12306选座安静区域选择策略  厨房不锈钢水槽发黑生锈怎么处理_水槽用可乐+锡纸2分钟抛亮如新  千牛数据看板网页版_千牛数据看板网页版访问方法  yandex入口引擎手机版 yandex安卓版下载入口  顺丰快件物流信息 官方网站查询入口  天眼查企业查询官网入口 天眼查官方网页版查询  C++如何操作注册表_Windows平台下C++读写注册表的API函数详解  C++如何解决segmentation fault_C++段错误调试与原因分析  PrimeNG Sidebar背景色自定义指南:CSS覆盖与主题化实践  Pyrogram与g4f集成:异步编程实践与常见错误解决  QQ邮箱官方网站登录入口_QQ邮箱网页版在线使用  Tabulator表格日期时间排序问题及自定义解决方案  蛙漫画网页版全站入口 蛙漫热门作品免费浏览  一加 14R 快充无反应_一加 14R 充电优化  Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换  J*aScript中在Map循环中检测并处理空数组元素  在Socket.IO连接中实现Access Token自动更新与动态重连  在FastAPI中利用lifespan与依赖注入高效管理Redis连接池  怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】  Centos/Linux 系统下安装 composer 的完整步骤  Win11怎么安装Linux子系统 Win11 WSL2安装Ubuntu及环境配置指南  React Router v6 教程:构建认证保护的私有路由与重定向策略  利用Bokeh CustomJS动态控制DataTable列可见性  微信聊天记录怎么加密_微信聊天记录加密方法  J*aScript中向JSON对象添加新属性的正确姿势  向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程  KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法  创客贴用户入口官网登录 创客贴网页版电脑版系统  CSS Box Model与弹性按钮:维持布局稳定的动画实践  J*aScript中高效清空DOM列表元素:解决for循环中断与任务管理问题  谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航  随机参数递归函数的基准调用次数与时间复杂度探究  微博网页版首页入口 微博电脑端官网登录链接  Sublime Text怎么显示空格和制表符_Sublime显示不可见字符设置  如何修改开机登录密码_Windows账户安全设置超详细教程【必学】  C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入  Python实时数据流中的动态最值查找策略  Google翻译怎么语音输入_Google翻译语音输入功能使用与设置方法  CKEditor 5 自定义构建在React应用中渲染失败的调试与解决  必由学官网入口 必由学教师登录入口  qq邮箱发邮件给国外发不出去_QQ邮箱国际邮件发送失败原因与解决  Spring Boot内嵌服务器与J*a EE全栈特性:选择与部署策略  Win11怎么开启高性能模式_Windows 11电源计划优化设置  CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示  漫蛙官网正版漫画入口 漫蛙2官方网页登录地址 

搜索