前言
緩存在程序中扮演着提升性能、降低資源消耗、改善用戶體驗等重要角色,是構建高效、可伸縮、穩定的系統不可或缺的重要組成部分。今天大姚給大家分享一款.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技術交流平臺。無論您是初學者還是有豐富經驗的開發者,我們都希望能爲您提供更多的價值和成長機會。