【分享】.NET开源强大、易于使用的缓存框架-FusionCache

科技技术爱好者 2024-04-19 03:14:29
前言

缓存在程序中扮演着提升性能、降低资源消耗、改善用户体验等重要角色,是构建高效、可伸缩、稳定的系统不可或缺的重要组成部分。今天大姚给大家分享一款.NET开源(基于MIT license)、强大、易于使用的缓存框架:FusionCache。

框架介绍

FusionCache是一个用于构建高效缓存系统的.NET框架,旨在提供简单易用、高性能和可靠的缓存解决方案。支持内存缓存、分布式缓存、http 缓存、CDN、浏览器缓存、离线缓存等等。

框架主要功能

框架具有自动防护缓存奔溃、分布式第二级缓存、软/硬超时处理、安全失败机制、后端通知、依赖注入和构建器支持、OpenTelemetry支持、完全同步/异步支持、事件机制等等功能。

看看框架官方描述:

框架源代码

框架Packages

创建一个控制台应用

我们创建一个FusionCacheExercise控制台应用来作为本篇文章的示例项目。

安装FusionCache Nuget包

在Nuget包管理器中搜索:ZiggyCreatures.FusionCache 进行安装。

创建PersonInfo类

public PersonInfo { public string UserName { get; set; } public int Age { get; set; } public string Nationality { get; set; } public string CacheMsg { get; set; } }

创建FusionCacheService

public 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 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}"); } } }

项目源码地址:https://github.com/ZiggyCreatures/FusionCache
0 阅读:0