今天给大家推荐一个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 -

推荐阅读

  • 一套.Net6可落地的微服务、分布式开源项目

  • 推荐一个最好用的高性能、低内存、跨平台的图片处理库

  • 推荐一个简单、灵活、好看、强大的 .Net 图表库

  • 一套.NetCore+Vue+Uniapp前后端分离的低代码快速开发框架

  • 一个基于.Net Core+Vue+Element Ui开发的OA系统

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

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

  1. 一个想法--开发与业务,我们互相依赖

    一个想法--开发与业务,我们互相依赖 编程之道很多人都读了,这位大师真是会利用中国阴阳学,但是中心思想就是工具就是工具,不是思想,经常听人们说,think in 什么,也是,如果单抱着什么编程实例也没 ...

  2. Web 开发中很实用的10个效果【附源码下载】

    在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记 ...

  3. 作为一个web开发人员,哪些技术细节是在发布站点前你需要考虑到的

    前日在cnblogs上看到一遍文章<每个程序员都必读的12篇文章>,其中大多数是E文的. 先译其中一篇web相关的"每个程序员必知之WEB开发". 原文: http:/ ...

  4. 一个 SAP 开发工程师十余年的技术写作之路回顾

    这是 Jerry 2021 年的第 31 篇文章,也是汪子熙公众号总共第 307 篇原创文章. 本文目录 汪子熙公众号的风格定位 为什么我会开始在微信公众号上书写技术文章 我的写作素材从哪里来 坚持了 ...

  5. devops实践指南_开发DevOps的实用指南:减少八卦的步骤

    devops实践指南 我的一个软件开发的朋友最近问我,如果我可以告诉他,他可以做什么亲自来鼓励更多的合作与理解的工作环境-一个与更一致建议 从未来 的社区的DevOps . 我们之间的对话很长,他的情 ...

  6. 教你如何开发一款实用的完整Android App

    教你如何开发一款实用的完整Android App,附源码 热文导读 | 点击标题阅读 成为 Android 大牛的10大独门秘籍 吊炸天!74款APP完整源码! 一份年薪30万的Android面试宝典 ...

  7. Web 开发中很实用的10个效果

    在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记 ...

  8. 网站开发中很实用的 HTML5 jQuery 插件

    这篇文章挑选了15款在网站开发中很实用的 HTML5 & jQuery 插件,如果你正在寻找能优化网站,使其更具创造力和视觉冲击,那么本文正是你需要的.这些优秀的 jQuery 插件能为你的网 ...

  9. web开发指南_成为专业Web开发人员的实用指南

    web开发指南 This article is meant to serve as a practical guide to becoming a professional web developer ...

最新文章

  1. 一:c#基本语法(2)(老田学习笔记)
  2. 详细讲解在Spring中进行集成测试AbstractDependencyInjectionSpringContextTests
  3. wifi模块 服务器通讯协议,模块之间通信协议
  4. project-population
  5. html5跨平台桌面打包,Html5到跨平台app应用
  6. mysql 1449 : The user specified as a definer ('usertest'@'%') does not exist 解决方法 (grant 授予权限)...
  7. Python字符串isidentifier()
  8. php ext在哪里,PHP Ext API
  9. 免费下载道客巴巴文档的方法
  10. 有限单元法matlab编程,有限单元法基础及MATLAB编程-(第3版)
  11. 6个高效学习编程的方法
  12. FileInputStream.read()返回int类型原因
  13. oracle执行计划px,【Oracle】并行等待之PX Deq: Execution Msg
  14. oracle查看历史oracle database数据库版本并下载
  15. 李永乐讲解计算机科学与技术,【视频】李永乐老师讲解“哥德巴赫猜想”【民科吧】_百度贴吧...
  16. spring整合各种RPC框架(netty、dubbo、dubbox、gRPC、Motan)-续(Motan)
  17. QQ群成员怎么提取? 1分钟提取一个群的成员信息
  18. MATLAB中常用的几种随机数生成函数
  19. 开源文件服务器filebrowser安装与配置
  20. 数据结构与算法-单向链表的修改和删除操作

热门文章

  1. 电商中常见的高并发设计
  2. 图的应用(校园导航图最短路径求解)
  3. 我的世界Minecraft1.12.2模组开发(10)生物实体
  4. Hive 计算用户留存率(次日,3日,N日)
  5. rosedb 上 Github Trending 啦!
  6. 获取Android设备电池电量状态
  7. java基础巩固-宇宙第一AiYWM:为了维持生计,架构知识+分+微序幕就此拉开之Docker(Docker概念:容器、镜像、仓库)、操作命令、Docker网络、分层、K8S<->Docker~整起
  8. 臻和科技独家引进乳腺癌精准诊断利器MammaPrint 为国内患者带来福音
  9. 天猫开店,品牌的最终归宿?
  10. 2022-2028全球与中国电容麦克风市场现状及未来发展趋势