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

news2024/9/27 15:34:50

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

- End -

推荐阅读

一个.Net Core开源监控解决方案,支持Redis、Elasticsearch、SqlServer

一个支持.Net 7的WinForm开源UI组件框架

盘点3个.Net开发的WMS仓库管理系统

推荐一个.Ner Core开发的配置中心开源项目

一款针对EF Core轻量级分表分库、读写分离的开源项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/371641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java虚拟机之类加载学习总结

文章目录1 什么是类加载1.1 类加载的应用1.2 类加载过程1.3 类的验证1.4 类初始化顺序2 类加载时机3 类加载器3.1 类加载分类3.2 双亲委派3.3 自定义类加载器3.4 类加载器的命名空间4 打破双亲委派4.1 线程上下文类加载器4.2 自定义类加载器5 类的卸载1 什么是类加载 Java 虚拟…

【工具】JSR-303后端参数校验框架的使用方法及说明

【工具】JSR-303后端参数校验框架的使用方法及说明 文章目录【工具】JSR-303后端参数校验框架的使用方法及说明1. 统一校验需求2. 使用说明2.1 引入依赖2.2 规则说明2.3 使用说明2.4 分组校验2.5 定制校验规则注解1. 统一校验需求 有一句话是这样说的——“前端防君子&#xf…

小知识点:Confluence + mysql 安装流程

流程一、Confluence 配置二、MySQL 配置三、启动一、Confluence 配置 访问下载地址,下载最新安装包 Confluence Server 下载存档 | Atlassian创建环境目录 mkdir -p /xxx/confluence/confluence-home 解压安装包 tar -zxvf atlassian-confluence-7.xx.x.tar.gz -C …

人工智能- windows10环境,配rtx 3060ti显卡,tensorflow-gpu安装

文章目录前言流程方法1.先安装网盘里的anaconda文件,安装后就是python3.8.8环境2.安装vs20193.vs2019安装完毕后开始安装cuda4.安装cudnn5.安装tensorflow-gpu6.测试GPU是否正常识别,tensorflow是否可用前言 最近显卡降价,入手了一块RTX3060…

ROS小车研究笔记:二维SLAM建图简介与源码分析

ROS提供了现成的各类建图算法实现。如果只是应用的话不需要了解详细算法原理,只需要了解其需要的输入输出即可。 1 Gmapping Gmapping使用粒子滤波算法进行建图,在小场景下准确度高,但是在大场地中会导致较大计算量和内存需求 Gmapping需要…

Go语言内存管理详解-学习笔记

1 自动内存管理 1.1 相关概念 Mutator:业务线程,分配新对象,修改对象指向关系Collector:GC线程,找到存活对象,回收死亡对象的内存空间Serial GC:只有一个collector(需要暂停&#…

读书笔记//《数据分析之道》

出版时间:2022年 作者曾在互联网大厂做数据分析。从举例可以洞见作者的工作经历。 点评:作者在数据分析领域非常资深,尝试在书中提供一个数据分析工作框架参考。书本内容有点感觉是ppt的集合,辅以案例说明。不过,干货还…

基于ORB-SLAM2+RTAB-MAP+ROS的三维重建设计——环境配置与安装

写下这篇是为了毕设题目《基于深度相机的电缆识别系统》。使用的设备与环境如下:Ubuntu 20.04ROSGazebo仿真运行Kinect 2.0ORB-SLAM2论文地址:https://arxiv.org/abs/1610.06475GitHub:https://github.com/raulmur/ORB_SLAM2一、为什么要选择…

python多线程网络编程

背景 使用过flask框架后,我对request这个全局实例非常感兴趣。它在客户端发起请求后会保存着所有的客户端数据,例如用户上传的表单或者文件等。那么在很多客户端发起请求时,服务器是怎么去区分不同的request对象呢?当查看了大量的…

Android 8请求权限时弹窗BUG

弹窗BUG 应用使用requestPermissions申请权限时,系统会弹出一个选择窗口,可进行允许或拒绝, 此窗口中有一个”不再询问“的选择框, ”拒绝”及“允许”的按钮。 遇到一个Bug,单点击“不再询问”,“允许”这个按钮会变…

OpenAPI SDK组件介绍

背景 公司成立以来,积累了数以万计的可复用接口。上层的SaaS业务,原则上要复用这些接口开发自己的业务,为了屏蔽调用接口的复杂性,基础服务开发了apisdk组件,定义了一套声明OpenAPI的注解、注解解析器,实例…

【蓝牙mesh】Bearer层(承载层)介绍

【蓝牙mesh】Bearer层(承载层)介绍 Bearer层简介 蓝牙Mesh协议栈由多个不同的协议层组成,其中最底层的协议就是Bearer层,它负责提供数据传输的底层支持。蓝牙Mesh协议栈的最底层就是BLE协议栈,所以Bearer层是直接与BL…

GO 中的 defer 有哪些注意事项?下

上次一起写了 3 个案例,咱们这一次继续,这一次的会比上一次的稍微不太一样 案例 1 还有一个也非常常用的案例,使用 defer 来捕获异常 ,也就是当程序崩溃的时候,defer 语句可以帮我们兜底,可以捕获异常后按…

vscode 配置 codeql

1、安装配置 codeql 环境 1.1 下载 codeql-cli 和 codeql 标准库 1)下载安装 下载安装 codeql-cli: Releases github/codeql-cli-binaries GitHub 下载 codeql 标准库:https://github.com/gi thub/codeql 下载的安装包解压,codeql 可执…

二,从源代码开始编译安装iperf3

本文目录Linux系统中编译安装基本知识简介第一步,执行configure第二步,执行make第三步,make install其它功能说明Linux系统中编译安装基本知识简介 从前一文章"一,下载iPerf3最新源代码"我们已经知道如何通过git的方式…

Linux系统下命令行安装MySQL5.6+详细步骤

1、因为想在腾讯云的服务器上创建自己的数据库,所以我在这里是通过使用Xshell 7来连接腾讯云的远程服务器; 2、Xshell 7与服务器连接好之后,就可以开始进行数据库的安装了(如果服务器曾经安装过数据库,得将之前安装的…

干货 | 八条“黄金规则”解决RF电路寄生信号

PART 01 接地通孔应位于接地参考层开关处流经所布线路的所有电流都有相等的回流。耦合策略固然很多,不过回流通常流经相邻的接地层或与信号线路并行布置的接地。在参考层继续时,所有耦合都仅限于传输线路,一切都非常正常。不过,如…

MySQL关于NULL值,常见的几个坑

数据库版本MySQL8。 1.count 函数 觉得 NULL值 不算数 ,所以开发中要避免count的时候丢失数据。 如图所示,以下有7条记录,但是count(name)却只有6条。 为什么丢失数据?因为MySQL的count函数觉得 Null值不算数,就是说…

Shader(着色)

1.深度测试(Z-Buffer )每个像素需要一个深度来排序是否需要渲染,所以需要额外的buffer来存储,frame buffer 存颜色,depth buffer (z-buffer) 存深度。2.Lambert(漫反射)3.Blinn-Phong (高光)4.环…

Netty权威指南总结(一)

一、为什么选择Netty:API使用简单,开发门槛低,屏蔽了NIO通信的底层细节。功能强大,预制了很多种编解码功能,支持主流协议。定制能力强,可以通过ChannelHandler对通信框架进行灵活地拓展。性能高、成熟、稳定…