上次給大家推薦過一個快取中介軟體《一個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 $"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);
專案地址
更多開源專案請檢視:一個專注推薦優秀.Net開源專案的榜單
- End -
文章首發於公眾號【程式設計樂趣】,歡迎大家關注。