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

举报
追逐时光者 发表于 2024/07/06 20:37:30 2024/07/06
【摘要】 前言缓存在程序中扮演着提升性能、降低资源消耗、改善用户体验等重要角色,是构建高效、可伸缩、稳定的系统不可或缺的重要组成部分。今天大姚给大家分享一款.NET开源(基于MIT license)、强大、易于使用的缓存框架:FusionCache。框架介绍FusionCache是一个用于构建高效缓存系统的.NET框架,旨在提供简单易用、高性能和可靠的缓存解决方案。支持内存缓存、分布式缓存、http ...

前言

缓存在程序中扮演着提升性能、降低资源消耗、改善用户体验等重要角色,是构建高效、可伸缩、稳定的系统不可或缺的重要组成部分。今天大姚给大家分享一款.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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。