.NET开源强大、易于使用的缓存框架 - FusionCache
前言
缓存在程序中扮演着提升性能、降低资源消耗、改善用户体验等重要角色,是构建高效、可伸缩、稳定的系统不可或缺的重要组成部分。今天大姚给大家分享一款.NET开源(基于MIT license)、强大、易于使用的缓存框架:FusionCache。
框架介绍
FusionCache是一个用于构建高效缓存系统的.NET框架,旨在提供简单易用、高性能和可靠的缓存解决方案。支持内存缓存、分布式缓存、http 缓存、CDN、浏览器缓存、离线缓存等等。
框架主要功能
框架具有自动防护缓存奔溃、分布式第二级缓存、软/硬超时处理、安全失败机制、后端通知、依赖注入和构建器支持、OpenTelemetry支持、完全同步/异步支持、事件机制等等功能。
看看框架官方描述:
框架源代码
框架Packages
创建一个控制台应用
我们创建一个FusionCacheExercise
控制台应用来作为本篇文章的示例项目。
安装FusionCache Nuget包
在Nuget包管理器中搜索:ZiggyCreatures.FusionCache
进行安装。
创建PersonInfo类
public class PersonInfo
{
public string UserName { get; set; }
public int Age { get; set; }
public string Nationality { get; set; }
public string CacheMsg { get; set; }
}
创建FusionCacheService
public class FusionCacheService
{
private readonly IFusionCache _cache;
public FusionCacheService(IFusionCache cache)
{
_cache = cache;
}
public async Task<PersonInfo> GetValueAsync(string key)
{
var cachedValue = await _cache.GetOrDefaultAsync<PersonInfo>(key).ConfigureAwait(false);
if (cachedValue != null)
{
cachedValue.CacheMsg = "缓存中的值";
return cachedValue;
}
else
{
//从数据库或其他数据源获取值
var value = GetValueFromDataSource(key);
//将值存入缓存,设置过期时间等
await _cache.SetAsync(key, value, TimeSpan.FromMinutes(10)).ConfigureAwait(false);
return value;
}
}
private PersonInfo GetValueFromDataSource(string key)
{
var personInfo = new PersonInfo
{
UserName = "追逐时光者",
Age = 18,
Nationality = "中国",
CacheMsg = "默认值"
};
return personInfo;
}
}
Program中调用
internal class Program
{
static void Main(string[] args)
{
//创建服务集合
var services = new ServiceCollection();
//服务注册
services.AddScoped<FusionCacheService>();
var entryOptions = new FusionCacheEntryOptions().SetDuration(TimeSpan.FromMinutes(10));
services.AddFusionCache()
.WithDefaultEntryOptions(entryOptions)
.WithPostSetup((sp, c) =>
{
c.DefaultEntryOptions.Duration = TimeSpan.FromMinutes(5);
});
using var serviceProvider = services.BuildServiceProvider();
var myService = serviceProvider.GetRequiredService<FusionCacheService>();
for (int i = 0; i < 2; i++)
{
var value = myService.GetValueAsync("FusionCacheExerciseKey").Result;
Console.WriteLine($"{value.CacheMsg} {value.UserName},{value.Age},{value.Nationality}");
}
}
}
项目源码地址
更多项目实用功能和特性欢迎前往项目开源地址查看,别忘了给项目一个Star支持。
优秀项目和框架精选
该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没
)。
https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md
DotNetGuide技术社区交流群
- DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。
- 在DotNetGuide技术社区中,开发者们可以分享自己的技术文章、项目经验、学习心得、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
- 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。
.NET开源强大、易于使用的缓存框架 - FusionCache的更多相关文章
- 5个强大的Java分布式缓存框架推荐
在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的 缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了 ...
- 5个强大的Java分布式缓存框架
在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了5 ...
- java 开源缓存框架--转载
原文地址:http://www.open-open.com/13.htm JBossCache/TreeCache JBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的 ...
- 【Android开源项目分析】android轻量级开源缓存框架——ASimpleCache(ACache)源代码分析
转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46379055 ASimpleCache框架源代码链接 https://github ...
- ACache【轻量级的开源缓存框架】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 官方介绍 ASimpleCache 是一个为android制定的 轻量级的 开源缓存框架.轻量到只有一个java文件(由十几个类精简 ...
- Android轻量级的开源缓存框架ASimpleCache
点击查看原文 先上方法调用,写最经常使用的.其它不一一写 保存数据: ACache mACache=ACache.get(this); mACache.put("数据名称", js ...
- 开源缓存框架之ASimpleCache
ASimpleCache 是一个为android制定的 轻量级的 开源缓存框架.轻量到只有一个java文件(由十几个类精简而来). 1.它可以缓存什么东西? 普通的字符串.JsonObject.Jso ...
- Java缓存框架
JBossCache/TreeCache JBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改善性能.缓存数据被自动复制,让你轻松进行Jboss服务器之间的集群工作 ...
- .NET缓存框架CacheManager在混合式开发框架中的应用(1)-CacheManager的介绍和使用
在我们开发的很多分布式项目里面(如基于WCF服务.Web API服务方式),由于数据提供涉及到数据库的相关操作,如果客户端的并发数量超过一定的数量,那么数据库的请求处理则以爆发式增长,如果数据库服务器 ...
- Phaser开源2d引擎 javascript/html5游戏框架
功能特点(Features) 易维护代码(Easy Asset Loading) Phaser可以加载图片,音频文件,数据文件,文本文件和自动解析精灵图和纹理地图集数据(出口纹理封隔器或Flash C ...
随机推荐
- 宝塔Linux面板 https://www.bt.cn/ 服务器环境搭建软件
宝塔Linux面板 https://www.bt.cn/
- C++学习笔记之进阶编程
目录 进阶编程 STL(Standard Template Library) 容器(container) 仿函数(functor) 算法(algorithm) transform 查找 全排列 迭代器 ...
- 什么是docker的多阶段构建
Docker多阶段构建是一种技术,允许在不同的构建阶段中使用不同的基础镜像,并只复制构建所需的文件和依赖项.这种技术旨在减少最终生成的Docker镜像的大小和运行时的资源消耗. 多阶段构建的一般工作流 ...
- Garnet发布 Redis不再是唯一选择
Garnet 是 Microsoft Research 的远程缓存存储,提供强大的性能(吞吐量和延迟).可扩展性.存储.恢复.集群分片.密钥迁移和复制功能. Garnet 可以与现有的 Redis 客 ...
- 记录--组件库的 Table 组件表头表体是如何实现同步滚动?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在使用 Vue 3 组件库 Naive UI 的数据表格组件 DataTable 时碰到的问题,NaiveUI 的数据表格组件 Da ...
- Spring Security 中的 BCryptPasswordEncoder
一.使用BCryptPasswordEncoder加密的值可以解出来吗 Spring Security 中的 BCryptPasswordEncoder 是一种单向加密算法,它是为了安全性考虑而设计的 ...
- Dockerfile 时区设置(MacOs有效)
# 设置时区RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeRUN echo 'Asia/Shanghai' >/etc/t ...
- 【Java面试题】Mybatis
五.MyBatis 40)谈谈 MyBatis Mybatis 是一个半自动化的 ORM 框架,它对 jdbc 的操作数据库的过程进行封装,使得开发者只需要专注于 SQL 语句本身,而不用去关心注册驱 ...
- AndroidStudio开发体温上报安卓APP------问题总结
总结一下出现的问题: 1.首先是AndroidStudio的配置问题 在这里可以看sdk版本配置 这里可以看gradle的版本信息和下载目录 AndroidStudio手动配置gradle 1.首先编 ...
- IPv4地址的结构体与网络字节序
IPv4地址的结构体 /* Fixed-size types, underlying types depend on word size and compiler. */ typedef signed ...