ASP.NET Core 入门教学七 缓存机制

ASP.NET Core 提供了多种缓存机制,可以帮助您提高应用程序的性能。以下是一些常用的缓存方法:

1. 内存缓存

内存缓存是最简单的缓存形式,它将数据存储在应用程序的内存中。ASP.NET Core 提供了一个 IMemoryCache 接口,用于实现内存缓存。

首先,在 Startup.cs 文件中配置内存缓存:

复制代码
cs 复制代码
public void ConfigureServices(IServiceCollection services)
{
    services.AddMemoryCache();
}

然后,在控制器或服务中使用 IMemoryCache

复制代码
cs 复制代码
public class HomeController : Controller
{
    private readonly IMemoryCache _cache;

    public HomeController(IMemoryImpl```csharp
public HomeController(IMemoryCache cache)
{
    _cache = cache;
}

public IActionResult Index()
{
    var cacheKey = "myData";
    if (!_cache.TryGetValue(cacheKey, out string data))
    {
        data = GetDataFromDatabase();
        _cache.Set(cacheKey, data, TimeSpan.FromMinutes(10));
    }

    return View(data);
}

private string GetDataFromDatabase()
{
    // 从数据库获取数据的逻辑
    return "Hello, World!";
}

2. 分布式缓存

分布式缓存允许多个实例共享缓存数据。ASP.NET Core 支持 Redis 和 SQL Server 作为分布式缓存后端。

以 Redis 为例,首先安装 Microsoft.Extensions.Caching.StackExchangeRedis NuGet 包:

复制代码
复制代码
dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis

然后在 Startup.cs 文件中配置分布式缓存:

复制代码
cs 复制代码
public void ConfigureServices(IServiceCollection services)
{
    services.AddStackExchangeRedisCache(options =>
    {
        options.Configuration = "localhost";
        options.InstanceName = "SampleInstance";
    });
}

在控制器或服务中使用分布式缓存:

复制代码
cs 复制代码
public class HomeController : Controller
{
    private readonly IDistributedCache _cache;

    public HomeController(IDistributedCache cache)
    {
        _cache = cache;
    }

    public async Task<IActionResult> Index()
    {
        var cacheKey = "myData";
        var data = await _cache.GetStringAsync(cacheKey);

        if (data == null)
        {
            data = GetDataFromDatabase();
            await _cache.SetStringAsync(cacheKey, data, new DistributedCacheEntryOptions
            {
                AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
            });
        }

        return View(data);
    }

    private string GetDataFromDatabase()
    {
        // 从数据库获取数据的逻辑
        return "Hello, World!";
    }
}

3. 响应缓存

响应缓存允许您缓存 HTTP 响应,从而减少服务器的负载。ASP.NET Core 提供了 ResponseCaching 中间件来实现响应缓存。

首先,在 Startup.cs 文件中启用响应缓存:

复制代码
cs 复制代码
public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCaching();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseResponseCaching();
}

然后,在控制器或操作方法上使用 [ResponseCache] 特性:

复制代码
cs 复制代码
[ResponseCache(Duration = 60, Location = ResponseCacheLocation.Any, NoStore = false)]
public IActionResult Index()
{
    return View();
}

以上就是 ASP.NET Core 中常见的缓存方法。您可以根据实际需求选择合适的缓存策略,以提高应用程序的性能。

相关推荐
H5css�海秀18 分钟前
今天是自学大模型的第一天(sanjose)
后端·python·node.js·php
SuniaWang27 分钟前
《Spring AI + 大模型全栈实战》学习手册系列 · 专题六:《Vue3 前端开发实战:打造企业级 RAG 问答界面》
java·前端·人工智能·spring boot·后端·spring·架构
韩立学长30 分钟前
Springboot校园跑腿业务系统0b7amk02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
sheji341634 分钟前
【开题答辩全过程】以 基于springboot的扶贫系统为例,包含答辩的问题和答案
java·spring boot·后端
代码栈上的思考2 小时前
消息队列:内存与磁盘数据中心设计与实现
后端·spring
程序员小假2 小时前
我们来说一下 b+ 树与 b 树的区别
java·后端
Meepo_haha3 小时前
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
java·spring boot·后端
sheji34163 小时前
【开题答辩全过程】以 基于springboot的房屋租赁系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
Victor3564 小时前
MongoDB(57)如何优化MongoDB的查询性能?
后端
Victor3564 小时前
MongoDB(58)如何使用索引优化查询?
后端