经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » ASP.net » 查看文章
.NET开源强大、易于使用的缓存框架 - FusionCache
来源:cnblogs  作者:追逐时光者  时间:2024/4/19 8:58:36  对本文有异议

前言

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

框架介绍

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

框架主要功能

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

看看框架官方描述:

框架源代码

框架Packages

创建一个控制台应用

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

安装FusionCache Nuget包

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

创建PersonInfo类

  1.     public class PersonInfo
        {
            public string UserName { get; set; }

            public int Age { get; set; }

            public string Nationality { get; set; }

            public string CacheMsg { get; set; }
        }

创建FusionCacheService

  1.     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中调用

  1.     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技术社区微信交流群??

原文链接:https://www.cnblogs.com/Can-daydayup/p/18142045

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号