【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. 分布式缓存同步
- 📥 下载地址
- 💬 结语
- 📒 参考文献
🎬 什么是 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 来管理应用程序的缓存有以下几个显著优势:
- 统一 API 接口:无论你使用哪种缓存提供程序,CacheManager 都提供一致的 API,简化了缓存的读写操作,避免了不同缓存系统之间的不一致性。
- 多级缓存支持:CacheManager 提供了强大的多级缓存支持,开发者可以将不同类型的缓存(如内存缓存、Redis)组合在一起,构建高效的缓存策略。
- 丰富的配置和扩展性:通过简单的配置,CacheManager 可以实现复杂的缓存策略,例如过期时间、优先级等,并且可以灵活扩展。
- 跨平台支持:CacheManager 支持 .NET Framework、.NET Core 和 .NET Standard,确保可以在各种环境中使用。
- 性能优化:CacheManager 对常见缓存提供程序进行了优化,确保在高并发的场景下也能稳定运行。
支持的缓存提供程序
CacheManager 支持多种缓存提供程序,开发者可以根据项目需求灵活选择合适的缓存系统。以下是 CacheManager 支持的一些常见缓存后端:
- 内存缓存(MemoryCache):适合单机应用的高速缓存,数据存储在内存中,读取和写入速度非常快。
- Redis:一种分布式缓存,支持持久化、数据同步,适用于需要跨服务器共享缓存的场景。
- Memcached:另一种流行的分布式缓存系统,专为高性能数据缓存设计。
- Microsoft.Extensions.Caching.Memory:微软官方提供的内存缓存实现,主要用于 ASP.NET Core 项目中。
- System.Runtime.Caching:用于 .NET Framework 的内存缓存实现。
- SQLite:基于磁盘的持久化缓存,用于需要持久化缓存到文件系统的场景。
📦 安装 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 的内存缓存功能,你可以根据需要扩展或更换缓存后端。
♨️ 使用 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)的频繁访问,提升应用的响应速度,尤其适用于高并发的分布式系统。
⚙️ 缓存策略与过期设置
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);
通过这些策略,开发者可以根据不同的业务需求灵活配置缓存,确保缓存的性能和有效性。
🥇 CacheManager 的高级特性
除了基本的缓存操作和多级缓存支持外,CacheManager 还提供了许多高级功能,帮助开发者更高效地管理缓存。
1. 缓存依赖
CacheManager 支持缓存依赖,即当某个缓存项发生变化时,依赖于它的其他缓存项也会自动失效。这对于需要保持缓存数据一致性的场景非常有用。
2. 缓存事件
CacheManager 提供了缓存事件的支持,你可以监听缓存的操作(如缓存命中、缓存失效等),并根据这些事件执行相应的逻辑。例如:
cache.OnRemoveByHandle += (sender, args) =>
{Console.WriteLine($"缓存项 '{args.Key}' 已被移除,原因: {args.Reason}");
};
3. 分布式缓存同步
在使用 Redis 或 Memcached 等分布式缓存时,CacheManager 支持跨服务器的缓存同步,确保在多台服务器上使用相同的缓存数据。
📥 下载地址
CacheManager 最新版 下载地址
💬 结语
CacheManager 是一个功能强大、灵活且易用的 .NET 缓存管理库,它为开发者提供了统一的缓存操作接口,支持多种缓存后端,尤其在多级缓存、缓存策略配置等方面表现出色。通过 CacheManager,开发者能够轻松构建高效、可靠的缓存机制,提升应用的性能并减少对数据库的压力。
如果你正在寻找一个简化缓存操作、提高应用性能的解决方案,CacheManager 是一个非常值得推荐的工具。无论是单机应用还是分布式系统,它都能够为你提供所需的缓存管理能力,并为项目的性能优化提供强有力的支持。
📒 参考文献
- CacheManager 官网
- CacheManager GitHub仓库
相关文章:

【C#】CacheManager:高效的 .NET 缓存管理库
在现代应用开发中,缓存是提升性能和降低数据库负载的重要技术手段。无论是 Web 应用、桌面应用还是移动应用,缓存都能够帮助减少重复的数据查询和处理,从而提高系统的响应速度。然而,管理缓存并不简单,尤其是当你需要处…...

【数学分析笔记】第4章第2节 导数的意义和性质(2)
4. 微分 4.2 导数的意义与性质 4.2.3 单侧导数 f ′ ( x ) lim Δ x → 0 f ( x Δ x ) − f ( x ) Δ x lim x → x 0 f ( x ) − f ( x 0 ) x − x 0 f(x)\lim\limits_{\Delta x\to 0}\frac{f(x\Delta x)-f(x)}{\Delta x}\lim\limits_{x\to x_0}\frac{f(x)-f(x_0)…...

深度学习:迁移学习
目录 一、迁移学习 1.什么是迁移学习 2.迁移学习的步骤 1、选择预训练的模型和适当的层 2、冻结预训练模型的参数 3、在新数据集上训练新增加的层 4、微调预训练模型的层 5、评估和测试 二、迁移学习实例 1.导入模型 2.冻结模型参数 3.修改参数 4.创建类ÿ…...

Footprint Growthly Quest 工具:赋能 Telegram 社区实现 Web3 飞速增长
作者:Stella L (stellafootprint.network) 在 Web3 的快节奏世界里,社区互动是关键。而众多 Web3 社区之所以能够蓬勃发展,很大程度上得益于 Telegram 平台。正因如此,Footprint Analytics 精心打造了 Growthly —— 一款专为 Tel…...
进入xwindows后挂起键盘鼠标没有响应@FreeBSD
问题: 在升级pkg包后,系统无法进入xfce等xwindows,表现为黑屏和看见鼠标,左上角有一个白字符块,键盘鼠标没有反应,整个系统卡住。但是可以ssh登录,内部的服务一切正常。 表现 处理过程…...
CentOS7.9 snmptrapd更改162端口
端口更改前: 命令: netstat -an |grep 162 [root@kibana snmp]# netstat -an | grep 162 udp 0 0 0.0.0.0:162 0.0.0.0:* unix 3 [ ] STREAM CONNECTED 45162 /run/systemd/journal/stdout u…...

模糊测试SFuzz亮相第32届中国国际信息通信展览会
9月25日,被誉为“中国ICT市场的创新基地和风向标”的第32届中国国际信息通信展在北京盛大开幕,本次展会将在为期三天的时间内,为信息通信领域创新成果、尖端技术和产品提供国家级交流平台。开源网安携模糊测试产品及相关解决方案精彩亮相&…...
CMake学习
向大佬lyf学习,先把其8服务器中所授fine 文章目录 前言一、CMakeList.txt 命令1. 最外层CMakeLists1.1 cmake_minimum_required()1.2 project()1.3 set()1.4 add_subdirectory(&…...

书生·浦语大模型全链路开源开放体系
书生浦语大模型全链路开源开放体系 大模型应用生态的发展和繁荣是建立在模型基座强大的通用基础能力之上的。上海AI实验室联合团队研究认为,大模型各项性能提升的基础在于语言建模能力的增强,对于大模型的研究应回归语言建模本质,通过更高质量…...
PHP安装swoole扩展无效,如何将文件上传至Docker容器
目录 过程 操作方式 过程 在没有使用过云服务器以前,Docker这个平台一直都很神秘。在我申请了华为云服务器,并使用WordPress镜像去搭建自己的网站以后,我不得不去把Docker平台弄清楚,原因是我使用的一个主题需要安装swoole扩展,才能够正常启用。而要将swoole.so这个扩展…...
Web3.0 应用项目
Web3.0 是下一代互联网的概念,旨在去中心化、用户拥有数据控制权和通过区块链技术实现信任的网络。Web3.0的应用项目主要集中在区块链、加密货币、去中心化应用 (DApps)、去中心化金融 (DeFi)、NFT(非同质化代币)等领域。以下是一些典型的 We…...
Linux 学习笔记(十六)—— 重定向与缓冲区
一、文件重定向 矩阵的下标,也就是文件描述符的分配规则,是从0开始空的最小的文件描述符分配给进程新打开的文件;文件输出重定向的原理是,关掉1(输出),然后打开文件,这个新打开的文…...

828华为云征文|WordPress部署
目录 前言 一、环境准备 二、远程连接 三、WordPress简介 四、WordPress安装 1. 基础环境安装 编辑 2. WordPress下载与解压 3. 创建站点 4. 数据库配置 总结 前言 WordPress 是一个非常流行的开源内容管理系统(Content Management System, CMS…...

华为开源自研AI框架昇思MindSpore应用案例:计算高效的卷积模型ShuffleNet
如果你对MindSpore感兴趣,可以关注昇思MindSpore社区 ShuffleNet ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型,和MobileNet, SqueezeNet等一样主要应用在移动端,所以模型的设计目标就是利用有限的计算资源来达到…...
《C++ 小游戏:简易飞机大战游戏的实现》
文章目录 《C 游戏代码解析:简易飞机大战游戏的实现》一、游戏整体结构与功能概述二、各个类和函数的功能分析(一)BK类 - 背景类(二)hero_plane类 - 玩家飞机类(三)plane_bullet类 - 玩家飞机发…...

SpringCloud源码:服务端分析(二)- EurekaServer分析
背景 从昨日的两篇文章:SpringCloud源码:客户端分析(一)- SpringBootApplication注解类加载流程、SpringCloud源码:客户端分析(二)- 客户端源码分析。 我们理解了客户端的初始化,其实…...

插槽slot在vue中的使用
介绍 在 Vue.js 中,插槽(slot)是一种用于实现组件内容分发的功能。通过插槽,可以让父组件在使用子组件时自定义子组件内部的内容。插槽提供了一种灵活的方式来组合和复用组件。 项目中有很多地方需要调用一个组件,比…...

针对考研的C语言学习(定制化快速掌握重点2)
1.C语言中字符与字符串的比较方法 在C语言中,单字符可以用进行比较也可以用 > , < ,但是字符串却不能用直接比较,需要用strcmp函数。 strcmp 函数的原型定义在 <string.h> 头文件中,其定义如下: int strcmp(const …...
[C++][IO流][流输入输出][截断理解]详细讲解
目录 1.流输入输出说明1.<<执行顺序2.>>执行顺序 2.截断(trunc)理解 1.流输入输出说明 1.<<执行顺序 链式操作的顺序:当使用多个<<操作符进行链式插入时,执行顺序是从左到右的 每个<<操作都将数据插入到前一个流的输出中…...

阿里云部署1Panel(失败版)
官网脚本部署不成功 这个不怪1panel,这个是阿里Linux 拉不到docker的下载源,懒得思考 正常部署直接打开官网 https://1panel.cn/docs/installation/online_installation/ 但是我使用的阿里云os(Alibaba Cloud Linux 3.2104 LTS 64位) 我执行不管用啊装不上docker 很烦 curl -s…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...