文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

.NET8 使用缓存的几种方法,你都用过吗?

2024-11-28 15:38

关注

一、内存缓存 (Memory Cache)

适用场景: 内存缓存适合单一服务器应用,通常用来缓存访问频繁、但实时性要求不高的数据,例如一些配置或用户信息。原理: 内存缓存将数据直接存在服务器内存中,访问速度非常快。唯一的问题是,当服务器重启时,缓存数据会丢失。

在.NET 8中,我们可以使用MemoryCache类来实现内存缓存。下面是一个简单的实现,假设我们有一个CacheService服务类来管理缓存数据:

using System;
using System.Threading.Tasks;
using Microsoft.Extensions.Caching.Memory;

public class CacheService
{
    private readonly IMemoryCache _memoryCache;

    public CacheService(IMemoryCache memoryCache)
    {
        _memoryCache = memoryCache;
    }

    public async Task GetCachedData(string key)
    {
        // 尝试从缓存中获取数据
        if (!_memoryCache.TryGetValue(key, out string cachedData))
        {
            // 如果缓存中没有数据,则从数据源中获取
            cachedData = await FetchDataFromDataSource(key);

            // 将数据存入缓存,并设置过期时间为10分钟
            _memoryCache.Set(key, cachedData, TimeSpan.FromMinutes(10));
        }
        return cachedData;
    }

    private Task FetchDataFromDataSource(string key)
    {
        // 模拟从数据源中获取数据
        return Task.FromResult($"Data for {key}");
    }
}

在这里,我们先检查缓存中是否有对应的key,如果没有才从数据源获取并存入缓存。这样可以避免多次请求相同的数据,起到节省资源的作用。

二、分布式缓存 (Distributed Cache)

适用场景: 如果你的应用需要部署在多台服务器上,分布式缓存就派上用场了。它让不同服务器之间可以共享缓存的数据,这样用户在不同服务器上访问时也能得到一致的缓存结果。原理: 分布式缓存将数据存储在一个“外部的缓存服务”中,比如Redis或SQL Server。

在.NET 8中,我们可以使用IDistributedCache接口来实现分布式缓存。下面是一个示例代码,演示如何使用IDistributedCache来获取和存储数据:

using System;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.Caching.Distributed;

public class CacheService
{
    private readonly IDistributedCache _distributedCache;

    public CacheService(IDistributedCache distributedCache)
    {
        _distributedCache = distributedCache;
    }

    public async Task GetCachedData(string key)
    {
        // 从分布式缓存中获取数据
        var cachedData = await _distributedCache.GetStringAsync(key);

        if (cachedData == null)
        {
            // 如果缓存中没有数据,则从数据源中获取
            cachedData = await FetchDataFromDataSource(key);

            // 将数据存入缓存,并设置过期时间为10分钟
            await _distributedCache.SetStringAsync(key, cachedData, new DistributedCacheEntryOptions
            {
                AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
            });
        }
        return cachedData;
    }

    private Task FetchDataFromDataSource(string key)
    {
        // 模拟从数据源中获取数据
        return Task.FromResult($"Data for {key}");
    }
}

在这个例子中,我们首先尝试从分布式缓存中获取数据,如果没有,则从数据源获取并设置缓存项的过期时间。这种方法尤其适合于大规模分布式系统,因为不同服务器都可以访问到同一份缓存数据。

三、HTTP缓存

适用场景: HTTP缓存主要用于减少服务器和客户端之间的网络流量,提升页面加载速度。常见于API接口和Web页面的响应缓存。原理: HTTP缓存通过设置HTTP标头(例如Cache-Control和Expires)来告知浏览器可以在本地缓存数据,并指定缓存的时长。

在.NET 8中,我们可以通过控制器中的ResponseCache属性来设置HTTP缓存。例如,以下代码将在服务器返回的数据上设置缓存标头,使客户端在接下来的60秒内都能从缓存中获取数据,而无需重新请求:

using Microsoft.AspNetCore.Mvc;

public class CacheController : ControllerBase
{
    [HttpGet("/api/data")]
    [ResponseCache(Duration = 60)] // 缓存60秒
    public IActionResult GetData()
    {
        // 获取并返回数据
        return Ok("Data");
    }
}

通过这种方法,客户端可以直接缓存HTTP响应,减少网络请求的频率,从而提升性能。这对一些更新频率较低的数据非常有效,比如配置文件、产品信息等。

总结

在.NET 8中,缓存已经不再是一种“可有可无”的技术,而是成为了性能优化中至关重要的一环。从简单的内存缓存,到适用于分布式系统的分布式缓存,再到HTTP缓存标头,各种缓存方式的配合可以让应用程序更加高效。在实际开发中,我们需要根据具体的应用场景和需求来选择合适的缓存方式,从而找到性能和资源使用的最佳平衡点。当然还有其它三方开源缓存方式,大家可以在github上找找。

希望这些方法能帮助你在开发中更好地利用缓存技术,为用户带来更流畅的体验。

来源:DotNet开发跳槽内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯