我是程式設計樂趣,一個10年.Net開發經驗老程式員,點選右上方“關注”,每天為你分享開源項目和程式設計知識。
上次給大家推薦過一個緩存中間件《一個C#開發的非常實用的緩存中間件》,今天再給大家推薦一個緩存中間件,兩者功能差不多,都是提供統一接口、多級緩存、分布式緩存、支援多種Provider等。
項目簡介
這是一個基于.Net Core開發的緩存中間件,它支援各種緩存并提供了很多進階功能。它的主要目标是讓開發人員開發更簡單、特别是一些複雜的緩存場景。
項目特色功能
1、統一緩存接口:友善我們随時調整緩存政策;
2、支援多種緩存:可以滿足我們多種業務場景;
3、支援多種緩存系列化:BinaryFormatter、Newtonsoft.Json,MessagePack和Protobuf;
4、支援緩存AOP:able, put,evict,可以簡化我們的代碼量;
5、多執行個體支援;
6、支援Diagnostics:友善我們跟蹤定位;
7、針對Redis支援特殊Provider:比如原子遞增遞減的操作等等;
8、二級緩存。
技術架構
1、跨平台:這是基于.Net Core開發的系統,可以部署在Docker, Windows, Linux。
2、基于Net 6.0開發。
3、支援緩存類别:本地緩存:InMemory,SQLite;分布式緩存:StackExchange.Redis,csredis,EnyimMemcachedCore。
項目結構
使用方法
配置緩存
在Startup.cs,配置緩存
public void ConfigureServices(IServiceCollection services)
{
......
services.AddEasyCaching(option =>
{
//記憶體緩存:default
option.UseInMemory("default");
//記憶體緩存:cus
option.UseInMemory("cus");
//redis緩存:redis1
option.UseRedis(config =>
{
config.DBConfig.Endpoints.Add(new ServerEndPoint("127.0.0.1", 6379));
config.DBConfig.SyncTimeout = 10000;
config.DBConfig.AsyncTimeout = 10000;
config.SerializerName = "mymsgpack";
}, "redis1")
.WithMessagePack("mymsgpack")//with messagepack serialization
;
//redis緩存:redis2
option.UseRedis(config =>
{
config.DBConfig.Endpoints.Add(new ServerEndPoint("127.0.0.1", 6380));
}, "redis2");
//sqlite緩存
option.UseSQLite(config =>
{
config.DBConfig = new SQLiteDBOptions { FileName = "my.db" };
});
//memcached 緩存
option.UseMemcached(config =>
{
config.DBConfig.AddServer("127.0.0.1", 11211);
});
option.UseMemcached(Configuration);
//fasterKv緩存
option.UseFasterKv(config =>
{
config.SerializerName = "msg";
})
.WithMessagePack("msg");
});
}
使用方式
public class CusController : Controller
{
//緩存
private readonly IEasyCachingProviderFactory _factory;
public CusController(IEasyCachingProviderFactory factory)
{
this._factory = factory;
}
// GET api/cus/inmem?name=Default
[HttpGet]
[Route("inmem")]
public string Get(string name = EasyCachingConstValue.DefaultInMemoryName)
{
//根據name,擷取緩存執行個體
var provider = _factory.GetCachingProvider(name);
var val = name.Equals("cus") ? "cus" : "default";
var res = provider.Get("demo", () => val, TimeSpan.FromMinutes(1));
return #34;cached value : {res}";
}
......
}
ResponseCache緩存
[ResponseCache(Duration = 30, VaryByQueryKeys = new string[] { "page" })]
public IActionResult List(int page = 0)
{
return Content(page.ToString());
}
AOP緩存
[EasyCachingAble(Expiration = 10)]
string GetCurrentUtcTime();
[EasyCachingPut(CacheKeyPrefix = "Castle")]
string PutSomething(string str);
[EasyCachingEvict(IsBefore = true)]
void DeleteSomething(int id);
項目位址
https://github.com/dotnetcore/EasyCaching
我是程式設計樂趣,一個10年.Net開發經驗老程式員,專注開源項目和程式設計知識分享。
私信回複:【888】,領取.Net視訊教程。
- End -
推薦閱讀
.Net Core開源監控解決方案,支援Redis、Elasticsearch、SqlServer
一個支援.Net 7的WinForm開源UI元件架構
盤點3個.Net開發的WMS倉庫管理系統
推薦一個.Ner Core開發的配置中心開源項目
一款針對EF Core輕量級分表分庫、讀寫分離的開源項目