前言
緩存在程式中扮演著提升效能、降低資源消耗、改善使用者體驗等重要角色,是構建高效、可伸縮、穩定的系統不可或缺的重要組成部份。今天大姚給大家分享一款.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支持💖。
https://github.com/ZiggyCreatures/FusionCache
優秀計畫和框架精選
該計畫已收錄到C#/.NET/.NET Core優秀計畫和框架精選中,關註優秀計畫和框架精選能讓你及時了解C#、.NET和.NET Core領域的最新動態和最佳實踐,提高開發工作效率和品質。坑已挖,歡迎大家踴躍送出PR推薦或自薦(
讓優秀的計畫和框架不被埋沒🤞
)。
https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md
學習是一個永無止境的過程,你知道的越多,你不知道的也會越多,在有限的時間內堅持每天多學一點,你一定能成為你想要成為的那個人。不積跬步無以至千裏,不積小流無以成江河!!!