.NET9 混合缓存HybridCache使用说明
2025-01-14
26 0在 .NET 9 中,HybridCache 是一种缓存策略,它结合了不同类型的缓存存储(例如内存缓存和分布式缓存)。这种混合缓存模式允许在应用程序中使用快速的本地内存缓存,同时利用分布式缓存作为持久化的后备缓存。这样可以提高性能并避免缓存穿透和缓存雪崩的问题。
1. HybridCache 简介
HybridCache 是 .NET 9 引入的一种新的缓存策略,目的是结合不同的缓存系统进行缓存优化。它通常是内存缓存和分布式缓存(例如 Redis)的结合体。
它通过以下几种方式优化缓存:
- 内存缓存:存储在本地内存中,速度较快,但如果应用程序重启或分布式环境中,缓存会丢失。
- 分布式缓存:存储在远程服务器上(如 Redis),可以跨多个实例共享,但访问速度相对较慢。
2. 配置 HybridCache
为了使用 HybridCache,需要先配置 内存缓存 和 分布式缓存(如 Redis)。
步骤 1:添加依赖项
在项目中添加所需的 NuGet 包:
dotnet add package Microsoft.Extensions.Caching.Memory
dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis
步骤 2:配置缓存服务
在 Program.cs 或 Startup.cs 中配置 HybridCache:
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
// 配置内存缓存
builder.Services.AddMemoryCache();
// 配置分布式缓存 (Redis)
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = "localhost:6379"; // Redis 服务器地址
options.InstanceName = "SampleApp:";
});
// 配置 HybridCache
builder.Services.AddHybridCache(options =>
{
options.SetMemoryCache(options => options.SizeLimit = 1024 * 1024 * 100); // 内存缓存大小限制为100MB
options.SetDistributedCache(options => options.Cache = builder.Services.BuildServiceProvider().GetRequiredService<IDistributedCache>());
});
var app = builder.Build();
// 使用 HybridCache 的代码
app.Run();
3. 使用 HybridCache
配置完成后,可以在控制器、服务或任何需要缓存的地方使用 HybridCache。
示例 1:缓存数据
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Caching.Hybrid;
using System.Text.Json;
public class ProductService
{
private readonly IHybridCache _hybridCache;
private readonly IDistributedCache _distributedCache;
private readonly IMemoryCache _memoryCache;
public ProductService(IHybridCache hybridCache, IDistributedCache distributedCache, IMemoryCache memoryCache)
{
_hybridCache = hybridCache;
_distributedCache = distributedCache;
_memoryCache = memoryCache;
}
public async Task<string> GetProductDataAsync(string productId)
{
// 优先从 HybridCache 中获取数据
var cacheKey = $"Product_{productId}";
// 尝试获取缓存中的数据
var cachedData = await _hybridCache.GetStringAsync(cacheKey);
if (!string.IsNullOrEmpty(cachedData))
{
return cachedData;
}
// 模拟从数据库获取数据
var productData = $"Product data for {productId}";
// 缓存数据到 HybridCache 中
await _hybridCache.SetStringAsync(cacheKey, productData, TimeSpan.FromMinutes(10));
return productData;
}
}
示例 2:设置缓存时选择存储策略
public async Task SetProductDataAsync(string productId, string data)
{
var cacheKey = $"Product_{productId}";
// 使用 HybridCache,将数据同时存储到内存和分布式缓存中
await _hybridCache.SetStringAsync(cacheKey, data, TimeSpan.FromMinutes(10));
}
4. HybridCache 的工作原理
HybridCache 会首先尝试从内存缓存中获取数据,如果内存缓存中不存在数据,则会退回到分布式缓存(例如 Redis)。如果分布式缓存也没有数据,应用程序可以从数据库或其他数据源获取数据,并将其存储在两者缓存中。
缓存的优先级:
- 内存缓存(MemoryCache):缓存的主要存储位置,优先使用。它的访问速度较快。
- 分布式缓存(DistributedCache):当内存缓存不可用时,HybridCache 会回退到分布式缓存。
缓存穿透:
如果数据不在内存缓存或分布式缓存中,可以从数据库等外部存储中加载数据,并将其缓存到两个缓存中。
缓存雪崩:
通过将缓存分为两种存储方式,避免了当某个缓存失效时对性能造成影响。因为在数据不在内存缓存中时,它可以从分布式缓存中恢复。
5. 缓存策略的优化
过期策略:通过设置适当的过期时间(例如 10 分钟),避免缓存中的数据永远存在,导致内存占用过多。
缓存大小限制:可以为内存缓存设置大小限制,以防止占用过多内存。
6. 总结
HybridCache 结合了内存缓存和分布式缓存,适用于需要同时利用两者优势的应用程序。它通过内存缓存快速响应请求,并通过分布式缓存提供持久化存储,确保高可用性。HybridCache 适用于分布式系统、微服务架构等场景。这种缓存策略在处理高并发、高可用的应用程序中非常有用。
您可能感兴趣:
阿里云 云服务器 99元1年 2核2G 3M固定带宽 续费与新购同价
领取 通义灵码 免费使用资格 兼容 Visual Studio Code、Visual Studio、JetBrains IDEs 等主流编程工具, 为你提供高效、流畅、舒心的智能编码体验!