【C#】CacheManager:高效的 .NET 缓存管理库

点关注开车不迷路

在现代应用开发中,缓存是提升性能和降低数据库负载的重要技术手段。无论是 Web 应用、桌面应用还是移动应用,缓存都能够帮助减少重复的数据查询和处理,从而提高系统的响应速度。然而,管理缓存并不简单,尤其是当你需要处理多个缓存提供程序(如内存缓存、分布式缓存等)时,这种复杂性会显著增加。

CacheManager 是一个开源且功能丰富的 .NET 缓存管理库,它提供了统一的缓存接口,支持多种缓存提供程序(如内存缓存、Redis、Memcached 等),并且能够轻松实现缓存的多级管理(如内存和分布式缓存的组合)。通过使用 CacheManager,开发者可以简化缓存的操作,提高应用程序的性能。

在这篇博客中,我们将深入了解 CacheManager,介绍其核心功能、支持的缓存提供程序,以及如何将它集成到 .NET 应用中,帮助你更高效地管理缓存。

在这里插入图片描述

华丽的分割线

➰缘起

    • 🎬 什么是 CacheManager?
      • 为什么选择 CacheManager?
      • 支持的缓存提供程序
    • 📦 安装 CacheManager
      • 1. 使用 NuGet 安装
      • 2. 基本配置
        • 说明:
    • ♨️ 使用 CacheManager 实现多级缓存
    • ⚙️ 缓存策略与过期设置
      • 1. 绝对过期
      • 2. 滑动过期
      • 3. 优先级策略
    • 🥇 CacheManager 的高级特性
      • 1. 缓存依赖
      • 2. 缓存事件
      • 3. 分布式缓存同步
    • 📥 下载地址
    • 💬 结语
    • 📒 参考文献


标题1

🎬 什么是 CacheManager?

CacheManager 是一个跨平台的 .NET 缓存库,它支持多种缓存后端,允许开发者通过统一的 API 轻松地操作各种缓存系统。CacheManager 提供了强大的功能,包括多级缓存、缓存依赖、过期策略等,旨在帮助开发者更方便地构建高效的缓存策略。

CacheManager 的核心特性包括:

  • 多种缓存后端支持:CacheManager 支持内存缓存(MemoryCache)、Redis、Memcached、Microsoft.Extensions.Caching.Memory、System.Runtime.Caching、SQLite 等多种缓存提供程序。
  • 多级缓存:允许将多种缓存提供程序组合在一起,例如先从内存中读取缓存,若未命中则读取分布式缓存(如 Redis)。
  • 缓存依赖和策略:支持 TTL(Time-to-Live,存活时间)、滑动过期、绝对过期等缓存过期策略。
  • 线程安全:CacheManager 对多线程访问进行了良好的处理,确保在并发情况下缓存的稳定性和安全性。

CacheManager 作为一个高度灵活的缓存框架,能够适应不同的应用场景,从小型应用的本地缓存,到分布式系统的多级缓存,都可以轻松实现。

为什么选择 CacheManager?

使用 CacheManager 来管理应用程序的缓存有以下几个显著优势:

  1. 统一 API 接口:无论你使用哪种缓存提供程序,CacheManager 都提供一致的 API,简化了缓存的读写操作,避免了不同缓存系统之间的不一致性。
  2. 多级缓存支持:CacheManager 提供了强大的多级缓存支持,开发者可以将不同类型的缓存(如内存缓存、Redis)组合在一起,构建高效的缓存策略。
  3. 丰富的配置和扩展性:通过简单的配置,CacheManager 可以实现复杂的缓存策略,例如过期时间、优先级等,并且可以灵活扩展。
  4. 跨平台支持:CacheManager 支持 .NET Framework、.NET Core 和 .NET Standard,确保可以在各种环境中使用。
  5. 性能优化:CacheManager 对常见缓存提供程序进行了优化,确保在高并发的场景下也能稳定运行。

支持的缓存提供程序

CacheManager 支持多种缓存提供程序,开发者可以根据项目需求灵活选择合适的缓存系统。以下是 CacheManager 支持的一些常见缓存后端:

  • 内存缓存(MemoryCache):适合单机应用的高速缓存,数据存储在内存中,读取和写入速度非常快。
  • Redis:一种分布式缓存,支持持久化、数据同步,适用于需要跨服务器共享缓存的场景。
  • Memcached:另一种流行的分布式缓存系统,专为高性能数据缓存设计。
  • Microsoft.Extensions.Caching.Memory:微软官方提供的内存缓存实现,主要用于 ASP.NET Core 项目中。
  • System.Runtime.Caching:用于 .NET Framework 的内存缓存实现。
  • SQLite:基于磁盘的持久化缓存,用于需要持久化缓存到文件系统的场景。

标题2

📦 安装 CacheManager

你可以通过 NuGet 轻松将 CacheManager 集成到你的 .NET 项目中。以下是安装 CacheManager 的基本步骤:

1. 使用 NuGet 安装

打开你的 .NET 项目,并通过 NuGet Package Manager 安装 CacheManager 包。可以使用以下命令在终端中进行安装:

Install-Package CacheManager.Core

或者通过 .NET CLI 安装:

dotnet add package CacheManager.Core

根据你使用的缓存提供程序,可以选择安装对应的扩展包。例如,如果你需要使用 Redis 作为缓存后端,可以安装 Redis 扩展包:

Install-Package CacheManager.StackExchange.Redis

2. 基本配置

在安装完成之后,你可以开始配置和使用 CacheManager。以下是一个简单的内存缓存配置示例:

using CacheManager.Core;class Program
{static void Main(string[] args){// 创建一个 CacheManager 实例,使用内存缓存作为后端var cache = CacheFactory.Build<string>("myCache", settings =>{settings.WithSystemRuntimeCacheHandle("handleName");});// 添加数据到缓存cache.Add("myKey", "Hello, CacheManager!");// 从缓存中读取数据var value = cache.Get("myKey");Console.WriteLine(value);  // 输出: Hello, CacheManager!}
}
说明:
  • CacheFactory.Build<string>("myCache", settings => { ... }) 用于创建一个 CacheManager 实例。在这个示例中,我们使用了 System.Runtime.Caching 作为缓存提供程序。
  • cache.Add("myKey", "Hello, CacheManager!") 向缓存中添加数据。
  • cache.Get("myKey") 从缓存中获取数据。

这个简单的示例展示了如何使用 CacheManager 的内存缓存功能,你可以根据需要扩展或更换缓存后端。


标题3

♨️ 使用 CacheManager 实现多级缓存

CacheManager 的多级缓存功能是它的一大特色。多级缓存可以让你的应用首先尝试从内存中读取数据,未命中时再尝试从分布式缓存(如 Redis)中读取,从而减少对远程缓存的频繁访问,提升性能。

下面是一个多级缓存的示例,结合内存缓存和 Redis 缓存:

using CacheManager.Core;class Program
{static void Main(string[] args){// 创建一个 CacheManager 实例,使用多级缓存(内存缓存 + Redis)var cache = CacheFactory.Build<string>("myMultiLevelCache", settings =>{// 第一级缓存:内存缓存settings.WithSystemRuntimeCacheHandle("inMemoryCache").And// 第二级缓存:Redis 缓存.WithRedisCacheHandle("redisCache", config =>{config.WithEndpoint("localhost", 6379);config.WithAllowAdmin();});});// 添加数据到多级缓存cache.Add("myKey", "Hello, Multi-Level Cache!");// 从多级缓存中读取数据var value = cache.Get("myKey");Console.WriteLine(value);  // 输出: Hello, Multi-Level Cache!}
}

说明:

  • WithSystemRuntimeCacheHandle("inMemoryCache") 定义了第一级缓存,使用内存缓存来存储数据。
  • WithRedisCacheHandle("redisCache", config => { ... }) 定义了第二级缓存,使用 Redis 作为分布式缓存存储。
  • CacheManager 会首先尝试从内存缓存中读取数据,若未命中则从 Redis 缓存中读取数据。

多级缓存策略能够有效减少对远程缓存(如 Redis)的频繁访问,提升应用的响应速度,尤其适用于高并发的分布式系统。


标题4

⚙️ 缓存策略与过期设置

CacheManager 提供了丰富的缓存策略选项,允许开发者根据不同的业务场景设置缓存的过期时间和失效策略。

1. 绝对过期

绝对过期意味着缓存项将在设定的时间点后自动失效。例如,设置缓存的绝对过期时间为 10 分钟:

cache.Add("myKey", "This is an item", ExpirationMode.Absolute, TimeSpan.FromMinutes(10));

2. 滑动过期

滑动过期意味着每次访问缓存项时,缓存项的过期时间都会被刷新。例如,设置缓存的滑动过期时间为 5 分钟:

cache.Add("myKey", "This is an item", ExpirationMode.Sliding, TimeSpan.FromMinutes(5));

3. 优先级策略

CacheManager 还支持为缓存项设置优先级。在缓存空间不足时,优先级低的缓存项将会首先被

移除。例如,设置一个缓存项的优先级为 NotRemovable,即该缓存项不会被自动移除:

cache.Put("myKey", "This is a high-priority item", CacheItemPriority.NotRemovable);

通过这些策略,开发者可以根据不同的业务需求灵活配置缓存,确保缓存的性能和有效性。


标题5

🥇 CacheManager 的高级特性

除了基本的缓存操作和多级缓存支持外,CacheManager 还提供了许多高级功能,帮助开发者更高效地管理缓存。

1. 缓存依赖

CacheManager 支持缓存依赖,即当某个缓存项发生变化时,依赖于它的其他缓存项也会自动失效。这对于需要保持缓存数据一致性的场景非常有用。

2. 缓存事件

CacheManager 提供了缓存事件的支持,你可以监听缓存的操作(如缓存命中、缓存失效等),并根据这些事件执行相应的逻辑。例如:

cache.OnRemoveByHandle += (sender, args) =>
{Console.WriteLine($"缓存项 '{args.Key}' 已被移除,原因: {args.Reason}");
};

3. 分布式缓存同步

在使用 Redis 或 Memcached 等分布式缓存时,CacheManager 支持跨服务器的缓存同步,确保在多台服务器上使用相同的缓存数据。


标题6

📥 下载地址


CacheManager 最新版 下载地址


标题7

💬 结语

CacheManager 是一个功能强大、灵活且易用的 .NET 缓存管理库,它为开发者提供了统一的缓存操作接口,支持多种缓存后端,尤其在多级缓存、缓存策略配置等方面表现出色。通过 CacheManager,开发者能够轻松构建高效、可靠的缓存机制,提升应用的性能并减少对数据库的压力。

如果你正在寻找一个简化缓存操作、提高应用性能的解决方案,CacheManager 是一个非常值得推荐的工具。无论是单机应用还是分布式系统,它都能够为你提供所需的缓存管理能力,并为项目的性能优化提供强有力的支持。


标题8

📒 参考文献

  • CacheManager 官网
  • CacheManager GitHub仓库

剩蛋快乐


愿者上钩

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

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

相关文章

使用RestTemplate调用EMQX API查询MQTT客户端列表信息

项目中集成mqtt客户端查询功能&#xff0c;使用到了EMQX api-v5&#xff0c;具体步骤&#xff1a; 一、准备工作 首先在EMQX dashboard中添加API 密钥 填写密钥名称&#xff0c;点击确定&#xff0c;会生成API Key和Secret Key&#xff0c;保存起来备用。 二、配置文件 在…

AWS Network Firewall - IGW方式配置只应许白名单域名出入站

参考链接 https://repost.aws/zh-Hans/knowledge-center/network-firewall-configure-domain-ruleshttps://aws.amazon.com/cn/blogs/networking-and-content-delivery/deployment-models-for-aws-network-firewall/ 1. 创建防火墙 选择防火墙的归属子网&#xff08;选择公有…

基于Hive和Hadoop的共享单车分析系统

本项目是一个基于大数据技术的共享单车分析系统&#xff0c;旨在为用户提供全面的单车使用信息和深入的出行行为分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 S…

【JavaEE】http/https 超级详解

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【Java】登神长阶 史诗般的Java成神之路 &#x1f98a;一.定义 HTTP&#xff08;HyperText Transfer Protocol&#xff09;即超文本传输协议&#xff0c;他是应用非常广泛的应用层协议&#xff0c;是…

C语言、Eazy_X——五子棋

//五子棋#include<graphics.h>#define board_size 20 #define pixel 600 int pr pixel / board_size; char board_data[board_size][board_size]; char current_piece o; int count 0;//检测指定玩家是否获胜 bool CheckWin(char c) {int i, j;//检查行for (i 0; i &…

线程池:线程池的实现 | 日志

&#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系列 &#x1f308;Linux学习专栏&#xff1a; 南桥谈Linux &#x1f308;数据结构学习专栏&#xff1a; 数据结构杂谈 &#x1f308;数据…

数值计算的程序设计问题举例

### 数值计算的程序设计问题 #### 1. 结构静力分析计算 **涉及领域**&#xff1a;工程力学、建筑工程 **主要问题**&#xff1a;线性代数方程组&#xff08;Linear Algebraic Equations&#xff09; **解释说明**&#xff1a; 在结构静力分析中&#xff0c;我们需要解决复杂的…

C++:类中的特殊关键字,运算重载符

1.My_string类中重载以下的运算符&#xff1a; 、[] 、>、<、、>、<、&#xff01;、、输入输出(>>、<<) 主函数&#xff1a; #include <iostream> #include "my_string.h"using namespace std;int main() {My_string s1("cat…

基于SpringBoot+Vue的个人健康管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【STM32-HAL库】自发电型风速传感器(使用STM32F407ZGT6)(附带工程下载链接)

一、自发电型风速传感器介绍 自发电型风速传感器&#xff0c;也称为风力发电型风速传感器或无源风速传感器&#xff0c;是一种不需要外部电源即可工作的风速测量设备。这种传感器通常利用风力来驱动内部的发电机构&#xff0c;从而产生电能来供电测量风速的传感器部分。以下是自…

GS-SLAM论文阅读笔记--GEVO

前言 这篇文章看着就让人好奇。众所周知&#xff0c;高斯是一个很不错的建图方法&#xff0c;但是本文的题目居然是只用高斯进行单目VO&#xff0c;咱也不知道这是怎么个流程&#xff0c;看了一下作者来自于MIT&#xff0c;说不定是个不错的工作&#xff0c;那就具体看看吧&am…

springboot实战学习(10)(ThreadLoacl优化获取用户详细信息接口)(重写拦截器afterCompletion()方法)

接着学习。之前的博客的进度&#xff1a;完成用户模块的注册接口的开发以及注册时的参数合法性校验、也基本完成用户模块的登录接口的主逻辑的基础上、JWT令牌"的组成与使用、完成了"登录认证"&#xff08;生成与验证JWT令牌&#xff09;以及完成获取用户详细信…

APISIX 联动雷池 WAF 实现 Web 安全防护

Apache APISIX 是一个动态、实时、高性能的云原生 API 网关&#xff0c;提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。 雷池是由长亭科技开发的 WAF 系统&#xff0c;提供对 HTTP 请求的安全请求&#xff0c;提供完整的 API 管理和…

【CKA】二、节点管理-设置节点不可用

2、节点管理-设置节点不可用 1. 考题内容&#xff1a; 2. 答题思路&#xff1a; 先设置节点不可用&#xff0c;然后驱逐节点上的pod 这道题就两条命令&#xff0c;直接背熟就行。 也可以查看帮助 kubectl cordon -h kubectl drain -h 参数详情&#xff1a; –delete-empty…

YOLO11震撼发布!

非常高兴地向大家介绍 Ultralytics YOLO系列的新模型&#xff1a; YOLO11&#xff01; YOLO11 在以往 YOLO 模型基础上带来了一系列强大的功能和优化&#xff0c;使其速度更快、更准确、用途更广泛。主要改进包括 增强了特征提取功能&#xff0c;从而可以更精确地捕捉细节以更…

在树莓派上基于 LNMP 搭建 Nextcloud

原文链接&#xff1a;https://blog.iyatt.com/?p17296 环境 树莓派CM4raspios 20240704 Debian 12 arm64 搭建 LNMP 环境 安装 Nginx sudo apt update sudo apt install -y nginx安装 php 及功能组件支持 参考&#xff1a;https://docs.nextcloud.com/server/latest/adm…

EXCEL图片链接快速批量转成图片

EXCEL图片链接快速批量转成图片 直接上图 "<table><img src"&C1&" height50 width50></table>"复制F列到txt文件&#xff0c;暂时放置 全选复制&#xff0c;然后插入一列&#xff0c;粘贴到新的一列中去如图一所示。 ps&…

光通信——PON技术

PON网络结构 PON&#xff08;Passive Optical Network&#xff0c;无源光网络&#xff09;系统的基本组成包括OLT&#xff08;Optical Line Terminal&#xff0c;光线路终端&#xff09;、ODN&#xff08;Optical Distribution Network&#xff0c;光分配单元&#xff09;和ON…

初学51单片机之I2C总线与E2PROM二

总结下上篇博文的结论&#xff1a; 1&#xff1a;ACK信号在SCL为高电平期间会一直保持。 2&#xff1a;在字节数据传输过程中如果发送电平跳变&#xff0c;那么电平信号就会变成重复起始或者结束的信号。&#xff08;上篇博文的测试方法还是不能够明确证明这个结论&#xff0…

深入解析 Java 虚拟机:内存区域、类加载与垃圾回收机制

我的主页&#xff1a;2的n次方_ 1. JVM 内存区域划分 程序计数器&#xff08;空间比较小&#xff09;。保存了下一条要执行的指令的地址&#xff08;指向元数据区指令的地址&#xff09;堆。JVM 最大的空间&#xff0c;new 出来的对象都在堆上栈。函数中的局部变量&#x…