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