.NET 9中新缓存HybridCache

是 .NET 9 中的一个全新缓存 API,为 ASP.NET Core 应用程序提供了一种新的改进的缓存解决方案。此新功能旨在简化缓存实现并提高性能。

HybridCache 的目标是解决 IMemoryCache 和 IDistributedCache 的缺点。

HybridCache 提供的一些功能:

  • - 进程内和进程外缓存的统一 API
  • - 可配置的序列化
  • - Stampede 保护

默认的入口点是GetOrCreateAsync方法,它实现了缓存旁模式。

  • HybridCache 会尝试检索指定键的对象。
  • 它会首先检查一级和二级缓存(如果配置了)。
  • 如果未找到对象,它会调用工厂方法,并在返回之前将其存储起来。

HybridCache 还具有踩踏保护功能,确保只有一个针对给定键的并发请求可以执行工厂方法。

public class SomeService
{
    private readonly HybridCache _cache;

    public SomeService(HybridCache cache)
    {
        _cache = cache;
    }

    public async Task<string> GetSomeInfoAsync(string name, int id, CancellationToken token = default)
    {
        return await _cache.GetOrCreateAsync(
            $"{name}-{id}", // 缓存条目的唯一key
            async cancel => await GetDataFromTheSourceAsync(name, id, cancel),
            token: token
        );
    }

    private async Task<string> GetDataFromTheSourceAsync(string name, int id, CancellationToken token)
    {
        string someInfo = $
"someinfo-{name}-{id}";
        return someInfo;
    }
}

HybridCache 的主要功能包括

  • 简化的应用程序接口:GetOrCreateAsync 方法允许开发人员指定缓存键和工厂方法,以便在不存在缓存值的情况下创建缓存值。
  • 并发执行处理:HybridCache 可确保一个给定键只有一个并发调用者执行工厂方法,而其他调用者则等待结果。
  • 可配置选项:开发人员可以使用 AddHybridCache 方法配置全局默认值,包括最大有效载荷大小、键长度和默认入口选项。
  • 灵活的缓存入口选项:HybridCacheEntryOptions 对象允许覆盖特定缓存项的全局默认值,如过期时间。
  • 性能改进:与传统的分布式缓存相比,HybridCache 具有显著的性能优势。在基准测试中,访问 HybridCache 的速度比访问单独的分布式缓存快约 1000 倍。

.NET 9 中引入的 HybridCache 标志着 ASP.NET Core 应用程序缓存功能的重大改进,为开发人员提供了更高效、更易用的缓存解决方案。