一個.Net Core開源快取中介軟體,讓你更加簡單、方便使用快取

chingho發表於2023-03-16

上次給大家推薦過一個快取中介軟體《一個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);

專案地址

https://github.com/dotnetcore/EasyCaching

更多開源專案請檢視一個專注推薦優秀.Net開源專案的榜單

- End -

文章首發於公眾號【程式設計樂趣】,歡迎大家關注。
圖片

相關文章