一个C#开发的非常实用的缓存中间件

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,182元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: *这是一个用C#开发的.Net开源的缓存中间件,他支持各种缓存并提供了很多高级功能。它的主要目标是让开发人员开发更简单、特别是一些复杂的缓存场景。

今天给大家推荐一个C#开发的非常实用的缓存中间件,支持各种缓存。

在我们实际开发中,缓存是经常用到的。特别是一些需要重复执行且消耗资源的操作时,我们都会把结果存储在缓存中,下次需要用到直接从缓存读取。在.Net支持缓存方式,也是非常多,还有其他中间件比如Redis、Memcache,每一种缓存使用方法、接口都不一样,如果我们需要改变缓存策略的时候,就需要修改代码。

今天给大家推荐这个中间件,就可以很好的满足我们的需求。

项目简介

这是一个用C#开发的.Net开源的缓存中间件,他支持各种缓存并提供了很多高级功能。它的主要目标是让开发人员开发更简单、特别是一些复杂的缓存场景。

项目支持多层缓存、分布式缓存、通过简单几行代码配置,就可以实现很多功能。提供了统一的缓存接口,方便项目改变缓存策略时,不需要大量的修改代码。而且项目还提供了很多功能,例如缓存同步、并发更新、序列化、事件、性能计数器。

技术架构

1、跨平台:这是基于.Net Core开发的系统,可以部署在Docker, Windows, Linux。

2、基于Net4.5开发。

3、支持缓存类别:MemoryCache、Redis 、Memcached 、Couchbase、System.Web.Caching。

项目结构

图片

使用方法

配置

<cacheManager xmlns="http://cachemanager.michaco.net/schemas/CacheManagerCfg.xsd">
<managers>
<cache name="cacheName" updateMode="Up" enableStatistics="false" enablePerformanceCounters="false">
<handle name="handleName" ref="systemRuntimeHandle" expirationMode="Absolute" timeout="50s"/>
</cache>
</managers>
<cacheHandles>
<handleDef  id="systemRuntimeHandle" type="CacheManager.SystemRuntimeCaching.MemoryCacheHandle`1, CacheManager.SystemRuntimeCaching"
defaultExpirationMode="Sliding" defaultTimeout="5m"/>
</cacheHandles>
</cacheManager>

声明

var cache = CacheFactory.Build<string>(s => s.WithDictionaryHandle());

添加或者更新缓存

var cache = CacheFactory.Build<string>(s => s.WithDictionaryHandle());

            Console.WriteLine("Testing update...");

if (!cache.TryUpdate("test", v => "item has not yet been added", out string newValue))
            {
                Console.WriteLine("Value not added?: {0}", newValue == null);
            }

            cache.Add("test", "start");
            Console.WriteLine("Initial value: {0}", cache["test"]);

            cache.AddOrUpdate("test", "adding again?", v => "updating and not adding");
            Console.WriteLine("After AddOrUpdate: {0}", cache["test"]);

            cache.Remove("test");
try
            {
var removeValue = cache.Update("test", v => "updated?");
            }
catch
            {
                Console.WriteLine("Error as expected because item didn't exist.");
            }

// use try update to not deal with exceptions
if (!cache.TryUpdate("test", v => v, out string removedValue))
            {
                Console.WriteLine("Value after remove is null?: {0}", removedValue == null);
            }

缓存事件监听

private static void EventsExample()
        {
var cache = CacheFactory.Build<string>(s => s.WithDictionaryHandle());
            cache.OnAdd += (sender, args) => Console.WriteLine("Added " + args.Key);
            cache.OnGet += (sender, args) => Console.WriteLine("Got " + args.Key);
            cache.OnRemove += (sender, args) => Console.WriteLine("Removed " + args.Key);

            cache.Add("key", "value");
var val = cache.Get("key");
            cache.Remove("key");
        }

计数器

private static void UpdateCounterTest()
        {
var cache = CacheFactory.Build<long>(s => s.WithDictionaryHandle());

            Console.WriteLine("Testing update counter...");

            cache.AddOrUpdate("counter", 0, v => v + 1);

            Console.WriteLine("Initial value: {0}", cache.Get("counter"));

for (var i = 0; i < 12345; i++)
            {
                cache.Update("counter", v => v + 1);
            }

            Console.WriteLine("Final value: {0}", cache.Get("counter"));
        }

Redis缓存

private static void RedisSample()
        {
var cache = CacheFactory.Build<int>(settings =>
            {
                settings
                    .WithSystemRuntimeCacheHandle()
                    .And
                    .WithRedisConfiguration("redis", config =>
                    {
                        config.WithAllowAdmin()
                            .WithDatabase(0)
                            .WithEndpoint("localhost", 6379);
                    })
                    .WithMaxRetries(1000)
                    .WithRetryTimeout(100)
                    .WithRedisBackplane("redis")
                    .WithRedisCacheHandle("redis", true);
            });

            cache.Add("test", 123456);

            cache.Update("test", p => p + 1);

var result = cache.Get("test");
        }

从Json读取配置

var builder = new Microsoft.Extensions.Configuration.ConfigurationBuilder()
    .AddJsonFile("cache.json");

this.Configuration = builder.Build();
项目地址: https://github.com/MichaCo/CacheManager

- End -

专注分享编程知识、热门有用有趣的开源项目

相关文章
|
1月前
|
XML 测试技术 API
利用C#开发ONVIF客户端和集成RTSP播放功能
利用C#开发ONVIF客户端和集成RTSP播放功能
1176 123
|
1月前
|
人工智能 运维 中间件
CTI中间件:现代呼叫中心的核心开发平台
乐科CTI中间件助力企业高效构建智能呼叫中心,集成通信与业务系统,支持多协议、AI融合、高可用部署,广泛应用于客服、营销等场景,降低开发成本,提升运维效率。
|
8月前
|
物联网 数据处理 C#
C#实现上位机开发,串口通信,读写串口数据并处理16进制数据
C#实现上位机开发,串口通信,读写串口数据并处理16进制数据。在自动化、物联网以及工业控制行业中,上位机开发是一项重要的技能。本教程主要介绍使用C#进行上位机开发,重点在于串口通信和数据处理。
1624 82
|
6月前
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
230 0
|
11月前
|
前端开发 JavaScript 安全
C#一分钟浅谈:Blazor WebAssembly 开发
Blazor WebAssembly 是一个客户端框架,允许开发者使用C#和Razor语法构建Web应用。本文介绍了Blazor WebAssembly的基本概念、常见问题及解决方案,包括路由配置、数据绑定、异步操作、状态管理和性能优化等方面的内容,并分享了一些易错点及如何避免的方法。希望这些内容能帮助你在Blazor WebAssembly开发中少走弯路,提高开发效率。
378 51
|
10月前
|
缓存 算法 安全
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
300 12
|
10月前
|
缓存 API C#
C# 一分钟浅谈:GraphQL 中的缓存策略
本文介绍了在现代 Web 应用中,随着数据复杂度的增加,GraphQL 作为一种更灵活的数据查询语言的重要性,以及如何通过缓存策略优化其性能。文章详细探讨了客户端缓存、网络层缓存和服务器端缓存的实现方法,并提供了 C# 示例代码,帮助开发者理解和应用这些技术。同时,文中还讨论了缓存设计中的常见问题及解决方案,如缓存键设计、缓存失效策略等,旨在提升应用的响应速度和稳定性。
155 13
|
11月前
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####
|
11月前
|
缓存 C# 开发者
C# 一分钟浅谈:Blazor Server 端开发
本文介绍了 Blazor Server,一种基于 .NET 的 Web 开发模型,允许使用 C# 和 Razor 语法构建交互式 Web 应用。文章从基础概念、创建应用、常见问题及解决方案、易错点及避免方法等方面详细讲解,帮助开发者快速上手并提高开发效率。
312 2
|
11月前
|
开发框架 缓存 .NET
C# 一分钟浅谈:Blazor Server 端开发
Blazor Server 是基于 ASP.NET Core 的框架,允许使用 C# 和 Razor 语法构建交互式 Web 应用。本文介绍 Blazor Server 的基本概念、快速入门、常见问题及解决方案,帮助开发者快速上手。涵盖创建应用、基本组件、数据绑定、状态管理、跨组件通信、错误处理和性能优化等内容。
719 1