返回

EasyCaching:一款灵活高效的 .NET 缓存库

2025-04-08 EasyCaching .NET 缓存 1806 0

EasyCaching 项目简介

EasyCaching 是一个开源的 .NET 缓存抽象库,由 DotNetCore 团队开发,旨在为 .NET 应用提供简单、统一、强大且可扩展的缓存解决方案。它支持内存缓存(In-Memory)、Redis、Memcached、LiteDB、CSRedis 等多种后端,同时提供异步 API、分布式锁、缓存穿透防护等功能,适用于中大型项目。

EasyCaching:一款灵活高效的 .NET 缓存库

EasyCaching GitHub地址:https://github.com/dotnetcore/EasyCaching

EasyCaching 主要特性

  • 多缓存后端支持:内存、Redis、Memcached、LiteDB、CSRedis、SQLite 等
  • 统一的缓存接口:通过 IEasyCachingProvider 和 IEasyCachingProviderFactory 解耦具体实现
  • 缓存穿透保护:自动防止缓存击穿与穿透
  • 支持分布式锁:便于实现如防止重复请求等场景
  • 内建自动序列化:支持 JSON、Protobuf 等序列化格式
  • 与 ASP.NET Core 紧密集成:支持依赖注入、配置方式灵活
  • Tag 支持:允许对缓存数据打标签后统一清理

EasyCaching 安装

以常用的内存缓存与 Redis 为例:

dotnet add package EasyCaching.InMemory
dotnet add package EasyCaching.Redis

EasyCaching 基本用法

1. 注册服务(在 Startup.cs 或 Program 中)

services.AddEasyCaching(options =>
{
    // 使用内存缓存
    options.UseInMemory("default");

    // 使用 Redis 缓存
    options.UseRedis(config =>
    {
        config.DBConfig.Endpoints.Add(new ServerEndPoint("localhost", 6379));
        config.DBConfig.Database = 0;
    }, "redis1");
});

2. 使用缓存(通过依赖注入获取 IEasyCachingProvider)

public class MyService
{
    private readonly IEasyCachingProvider _cache;

    public MyService(IEasyCachingProviderFactory factory)
    {
        _cache = factory.GetCachingProvider("default"); // 或 "redis1"
    }

    public async Task<string> GetDataAsync(string key)
    {
        var cacheValue = await _cache.GetAsync<string>(key);
        if (cacheValue.HasValue)
        {
            return cacheValue.Value;
        }

        var result = await GetFromDbAsync(); // 模拟数据库获取
        await _cache.SetAsync(key, result, TimeSpan.FromMinutes(5));
        return result;
    }
}

EasyCaching 进阶功能

缓存穿透防护

使用 GetAsync 的重载版本:

var result = await _cache.GetAsync("myKey", () => LoadFromDb(), TimeSpan.FromMinutes(10));

分布式锁

var locker = _cache as IEasyCachingLocker;
using (await locker.LockAsync("lock_key", 30))
{
    // 执行业务逻辑
}

EasyCaching 的适用场景

  • 缓存热点数据,提升性能
  • 分布式系统中的共享缓存
  • 防止缓存击穿、雪崩、穿透
  • 缓存多数据源场景(比如 Redis + 内存双层缓存)
顶部