天天看點

一個.Net Core開源緩存中間件,讓你更加簡單、友善使用緩存

作者:程式設計樂趣
我是程式設計樂趣,一個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。

項目結構

一個.Net Core開源緩存中間件,讓你更加簡單、友善使用緩存

使用方法

配置緩存

在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輕量級分表分庫、讀寫分離的開源項目

繼續閱讀