.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支持💖。

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

DotNetGuide技術社區交流羣

  • DotNetGuide技術社區是一個面向.NET開發者的開源技術社區,旨在爲開發者們提供全面的C#/.NET/.NET Core相關學習資料、技術分享和諮詢、項目框架推薦、求職和招聘資訊、以及解決問題的平臺。
  • 在DotNetGuide技術社區中,開發者們可以分享自己的技術文章、項目經驗、學習心得、遇到的疑難技術問題以及解決方案,並且還有機會結識志同道合的開發者。
  • 我們致力於構建一個積極向上、和諧友善的.NET技術交流平臺。無論您是初學者還是有豐富經驗的開發者,我們都希望能爲您提供更多的價值和成長機會。

歡迎加入DotNetGuide技術社區微信交流羣👪

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章