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

news2024/10/1 12:12:24

点关注开车不迷路

在现代应用开发中,缓存是提升性能和降低数据库负载的重要技术手段。无论是 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.coloradmin.cn/o/2182307.html

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

相关文章

《RabbitMQ篇》Centos7安装RabbitMQ

安装RabbitMQ 安装包网盘下载地址 链接&#xff1a;https://pan.baidu.com/s/1bG_nP0iCdAejkctFp1QztQ?pwd4mlw 先上传安装包到服务器&#xff08;erlang-23.3.4.11-1.el7.x86_64.rpm和rabbitmq-server-3.9.16-1.el7.noarch.rpm&#xff09;然后使用指令安装 # 安装 erlang r…

掌握 JVM 垃圾收集线程:简化 VM 选项

垃圾收集阶段对于任何 Java 应用程序都至关重要。主要目标是保持高吞吐量和低延迟之间的平衡。通过配置垃圾收集器&#xff0c;我们可以提高性能&#xff0c;或者至少推动应用程序朝着特定的方向发展。 垃圾收集周期越短越好。因此&#xff0c;分配给垃圾收集器的资源越多&…

昇思MindSpore进阶教程--下沉模式

大家好&#xff0c;我是刘明&#xff0c;明志科技创始人&#xff0c;华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享&#xff0c;如果你也喜欢我的文章&#xff0c;就点个关注吧 正文开始 昇腾芯片集成了AICORE和AICPU等…

C#自定义工具类-数组工具类

目录 数组工具类基本操作 1.排序&#xff1a;升序&#xff0c;降序 2.查找 1&#xff09;查找最值&#xff1a;最大值&#xff0c;最小值 2&#xff09;查找满足条件的单个对象 3&#xff09;查找满足条件的所有对象 4&#xff09;选取数组中所有对象的某一字段 完整代…

河南做网站与SEO:如何提升搜索引擎排名

河南做网站与SEO&#xff1a;如何提升搜索引擎排名 在当今数字化时代&#xff0c;越来越多的企业意识到互联网的重要性&#xff0c;特别是在河南这样一个快速发展的地区&#xff0c;建立一个优秀的网站已经成为企业发展的必要条件。而在建立网站的同时&#xff0c;SEO&#xff…

--- java数据结构 map set ---

java中map 和 set的底层实现是通过搜索树和哈希函桶来实现 搜索树 二叉搜索树有叫二叉排序树 他具有以下的特点 若存在左节点&#xff0c;那么他左节点的值一定小于根节点 若存在右节点&#xff0c;那么他右节点的值一定大于根节点 它的左右子树也是搜索树 对他进行中序…

leetcode热题100.最长公共子序列

题目 1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原…

SOMEIP_ETS_143: SD_Request_non_existing_ServiceID

测试目的&#xff1a; 验证DUT能够拒绝一个请求不存在的服务ID&#xff08;ServiceID&#xff09;的SubscribeEventgroup消息&#xff0c;并以SubscribeEventgroupNAck作为响应。 描述 本测试用例旨在确保DUT遵循SOME/IP协议&#xff0c;当接收到一个请求不存在服务ID的Subs…

RS485串口通信:【图文详讲】

RS485&#xff0c;RS的意义为Recommended Standard的缩写&#xff0c;也就是推荐标准&#xff0c;是一种常用的半双工-异步-串行通信总线。半双工的意思就是两者通信时&#xff0c;同一时刻&#xff0c;只能由其中一方发送&#xff0c;另一方只能接收&#xff0c;不可以同时收发…

vue3 antdv3/4 Modal显示一个提示,内容换行显示。

1、官网地址&#xff1a; Ant Design Vue — An enterprise-class UI components based on Ant Design and Vue.js 2、显示个信息&#xff1a; Modal.info({title: This is a notification message,content: h(div, {}, [h(p, some messages...some messages...),h(p, some …

基于解压缩模块的JPEG同步重压缩检测论文学习

一、论文基本信息&#xff1a; 论文题目&#xff1a;基于解压缩模块的JPEG同步重压缩检测 作者&#xff1a;王金伟1 &#xff0c;胡冰涛1 &#xff0c;张家伟1 &#xff0c;马 宾2 &#xff0c;罗向阳3 &#xff08;1.南京信息工程大学计算机学院、网络空间安全学院&#xf…

Linux-L11-查看本机ip地址

linux查看ip地址 查看自己的IP地址使用 ip 命令&#xff1a;使用 ifconfig 命令使用 hostname 命令&#xff1a;使用 nmcli 命令 查看某个特定接口的IP查看公网IP地址 在Linux系统中&#xff0c;查看自己的IP地址可以通过多种方式实现&#xff0c;这里提供几种常用的方法&#…

Stable Diffusion绘画 | LCM模型:实现秒出图

在过往&#xff0c;不管使用 SD 还是 MJ&#xff0c;生成一张图片起码要等上10秒。 而现在&#xff0c;有了 LCM 技术的加持&#xff0c;已经能做到秒出图&#xff0c;甚至是实时出图。 LCM(潜空间一致性模型) 是由 清华大学信息科学技术研究院 研发的大模型&#xff0c;它最…

鸿蒙 如何退出 APP

terminateSelf() 停止Ability自身 在EntryAbility中这么使用 this.context.terminateSelf()在Pages页面中这么使用 import { common } from kit.AbilityKit (getContext(this) as common.UIAbilityContext)?.terminateSelf() 也可以直接封装&#xff1a; import common f…

【GreenHills】GHS的Run-Time检查功能

【更多软件使用问题请点击亿道电子官方网站】 一、文档背景 在编写代码时&#xff0c;内存检查的重要性不容忽视。内存是程序运行的核心资源之一&#xff0c;负责存储程序运行所需的数据。由于内存资源的有限性和操作的复杂性&#xff0c;内存错误常常会直接导致程序崩溃、性…

华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架的Swin Transformer

如果你对MindSpore感兴趣&#xff0c;可以关注昇思MindSpore社区 模型简介 模型背景 Swin Transfromer在2021年首次发表于论文《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》&#xff0c;目前已用于图像分割、分类等计算机视觉领域的各项任务…

如何搭建医疗陪诊平台?基于互联网医院系统源码的开发技术详解

本篇文章&#xff0c;小编将深入探讨医疗陪诊平台的搭建过程&#xff0c;尤其是基于互联网医院系统源码的开发技术&#xff0c;以期为有志于此领域的开发者提供参考。 一、选择合适的互联网医院系统源码 在搭建医疗陪诊平台时&#xff0c;选择合适的互联网医院系统源码至关重…

【前端开发入门】前端开发环境配置

目录 引言一、Vscode编辑器安装1. 软件下载2. 软件安装3. 插件安装 二、Nodejs环境安装及版本控制1. 安装内容2. 使用nvm安装2.1 软件下载并安装2.2 nvm基本指令2.3 nvm下载过慢导致超时解决 三、git安装及配置1. 软件下载2. 软件安装3. 基础配置 四、总结 引言 本系列教程旨在…

SRC漏洞挖掘 | 针对Spring-Boot 框架漏洞的初探

&#x1f497;想加内部圈子&#xff0c;请联系我&#xff01; &#x1f497;文章交流&#xff0c;请联系我&#xff01;&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 一个想当文人的黑客 &#xff0c;很高兴认识大家~ ✨主…

fmt:C++ 格式化库

fmt 是一个现代化、快速且安全的 C 格式化库&#xff0c;专注于高效地格式化文本。它提供了类似 Python 的 format 功能&#xff0c;但具有更高的性能和类型安全特性。fmt 库在处理字符串格式化、日志输出以及构建用户友好的输出时尤为强大。自从 C20 标准引入 std::format 后&…