首页 > 其他分享 >一个.Net Core开源缓存中间件,简单、方便使用缓存

一个.Net Core开源缓存中间件,简单、方便使用缓存

时间:2023-03-17 14:11:19浏览次数:55  
标签:缓存 方便使用 中间件 option Net config string

上次给大家推荐过一个缓存中间件《一个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 -

文章首发于公众号【编程乐趣】,欢迎大家关注。

 

出处:https://www.cnblogs.com/chingho/p/17155494.html

标签:缓存,方便使用,中间件,option,Net,config,string
From: https://www.cnblogs.com/mq0036/p/17226561.html

相关文章

  • Redis缓存经典问题:缓存雪崩、击穿、穿透、双写一致性、并发竞争、热点key、BigKey
     一. 缓存雪崩1. 含义同一时刻,大量的缓存同时过期失效。2. 产生原因和后果(1). 原因:由于开发人员经验不足或失误,大量热点缓存设置了统一的过期时间。(2).......
  • 什么是缓存击穿?怎么解决?
    某一个key可能会在某些时间点被超高并发地访问,是一种非常"热点"的数据,这个key失效,导致并发访问数据库。与缓存雪崩的区别在于这里针对某一key缓存,前者则是很多key,这里是指......
  • go微服务开发:go-zero中间件
    TRANSLATEwithxEnglishArabicHebrewPolishBulgarianHindiPortugueseCatalanHmongDawRomanianChineseSimplifiedHungarianRussianC......
  • Gin 中间件
    中间件在Gin框架中,中间件(Middleware)指的是可以拦截http请求-响应生命周期的特殊函数,在请求-响应生命周期中可以注册多个中间件,每个中间件执行不同的功能,一个中间执行完再......
  • SpringBoot 启动顺序 、BeanPostProcessor 、事务原理、三级缓存、SpringMVC
    SpringMVC先生成web容器,比如TOMCAT,然后注册servletDispathcer, Spring容器在DispatcherServlet里面BeanPOSTProcessor可以在bean生成后对bean属性进行更改事务是......
  • Golang-微服务-紧急升级-缓存
    1.背景API服务器timewait一直下不去尝试阿里云优化方案,修改内核配置,也不管用前端表现为:页面访问卡顿页面丢失(接口504)Postmanstart_trasfer参数忽高忽......
  • Shifu高级功能:命令行中间件之HTTP 到 SSH 的中间件
    介绍为了使Shifu可以整合开发者的驱动,我们编写了一个简单的HTTP到SSH的中间件来供开发者使用设计这个HTTP到SSH的中间件设计如下:从中间件利用容器提供的公钥建......
  • Laravel清除缓存
    清除应用程序缓存phpartisancache:clear清除路由缓存phpartisanroute:cache清楚配置缓存phpartisanconfig:cache清楚已编译的视图文件phpartisanview:cl......
  • 一文彻底搞懂前端缓存机制
    浏览器缓存步骤1)浏览器在加载资源时,先根据这个资源的一些httpheader判断它是否命中强缓存,强缓存如果命中,浏览器直接从自己的缓存中读取资源,不会发请求到服务器。比如某个......
  • 缓存穿透、雪崩
    缓存穿透问题查询缓存中不存在的数据时,每次都要查询数据库。解决缓存穿透的通用方案是: 给所有指定的key预先设定一个默认值,比如空字符串“Null” 缓存并发问题......