C# (.NET) 中的缓存:Redis、MemoryCache 及其他解决方案

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C# (.NET) 中的缓存:Redis、MemoryCache 及其他替代方案

缓存是提升 C# (.NET) 应用程序性能的关键工具之一。它可以减少响应时间、降低数据库负载并节省基础设施成本。本文将介绍 .NET 内置机制、基于 Redis 的流行实现,以及 NCache 和 Couchbase 等替代方案。



1. 内置缓存:MemoryCache

MemoryCache(命名空间 Microsoft.Extensions.Caching.Memory)是一种简单快速的缓存,将数据存储在单个进程的内存中。它非常适合单线程应用或单实例 Web 服务器。



安装与配置

dotnet add package Microsoft.Extensions.Caching.Memory


基本使用示例

using Microsoft.Extensions.Caching.Memory;

public class DataService{ private readonly IMemoryCache _cache; private readonly TimeSpan _cacheDuration = TimeSpan.FromMinutes(5);

public DataService(IMemoryCache cache) => _cache = cache;

public async Task<string> GetDataAsync(string key) { if (!_cache.TryGetValue(key, out string cachedData)) { cachedData = await FetchFromDatabaseAsync(key); _cache.Set(key, cachedData, new MemoryCacheEntryOptions { AbsoluteExpirationRelativeToNow = _cacheDuration }); } return cachedData; }}


优点与缺点

  • + 简单,零网络延迟。
  • + 内置过期支持(绝对/滑动)。
  • - 无法在扩展到多台服务器时工作。
  • - 应用程序重启时缓存被清除。


2. 分布式缓存:Redis

Redis 是 .NET 生态系统中分布式缓存最流行的选择。它作为一个独立服务运行,可供所有应用程序实例访问。在 .NET 中使用 IDistributedCache 抽象。



安装包

dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis


在 Program.cs 中配置

builder.Services.AddStackExchangeRedisCache(options =>{    options.Configuration = "localhost:6379";    options.InstanceName = "MyAppCache";});


使用 IDistributedCache 的示例

public class RedisCacheService{    private readonly IDistributedCache _cache;

public RedisCacheService(IDistributedCache cache) => _cache = cache;

public async Task SetAsync(string key, byte[] data, int minutes = 10) { await _cache.SetAsync(key, data, new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(minutes) }); }

public async Task<byte[]> GetAsync(string key) { return await _cache.GetAsync(key); }}


Redis 的高级功能

  • 对象序列化:使用 System.Text.Json 或 Newtonsoft.Json。
  • 按标签失效:第三方库(例如 EasyCaching.Redis)允许对条目进行分组。
  • Pub/Sub:用于缓存更改通知。


3. Redis 的替代方案



3.1 NCache

NCache 是一个商业解决方案(有免费版本),支持 .NET。它提供高级功能:节点间同步、类似 SQL 的缓存查询、ASP.NET 会话缓存。

  • + 内置支持 IDist

推荐