You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8 Aspire中Redis输出缓存未生效,如何排查解决?

.NET 8 Aspire Redis输出缓存未生效问题排查与解决

问题场景

我正在试用.NET 8的Aspire特性,基于Razor页面应用,按照官方示例配置Redis输出缓存,并通过编排方式注册缓存服务。

配置代码

AppHost项目Program.cs

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddRedisContainer("rediscache");
builder.AddProject<Projects.WeatherApp_Web>("frontend")
    .WithReference(cache);

前端项目Program.cs(服务注册)

var builder = WebApplication.CreateBuilder(args);
builder.AddServiceDefaults();
builder.AddRedisOutputCache("rediscache");
// 其他配置...

前端项目Program.cs(应用使用)

var app = builder.Build();
app.UseOutputCache();
// 其他中间件配置...

Razor页面缓存设置

[OutputCache(Duration = 5)]

问题现象

页面内容始终实时更新,缓存未生效且无报错信息。


排查与解决步骤

1. 验证Redis连接有效性

Aspire会自动注入Redis连接字符串,但需确认前端项目是否正确获取:

  • 检查前端项目appsettings.json中是否自动生成ConnectionStrings:rediscache配置,格式应为redis://localhost:6379。
  • 添加日志验证连接状态:
var redisConn = builder.Configuration.GetConnectionString("rediscache");
builder.Logging.AddConsole();
var logger = builder.Services.BuildServiceProvider().GetRequiredService<ILogger<Program>>();
logger.LogInformation("Redis连接字符串: {Conn}", redisConn);

运行时查看控制台日志,确认连接字符串正常输出。

2. 检查中间件顺序

UseOutputCache必须放在路由中间件之前、静态文件中间件之后,正确顺序示例:

var app = builder.Build();

app.UseHttpsRedirection();
app.UseStaticFiles();

// 输出缓存中间件必须在此位置
app.UseOutputCache();

app.UseRouting();
app.UseAuthorization();

app.MapRazorPages();

app.Run();

若UseOutputCache放在UseRouting或MapRazorPages之后,缓存逻辑不会触发。

3. 确认Razor页面缓存特性应用

  • 确保[OutputCache]特性应用在页面模型类或主处理方法(如OnGet)上:
[OutputCache(Duration = 5)]
public class IndexModel : PageModel
{
    public void OnGet()
    {
        // 页面逻辑
    }
}
  • 通过浏览器开发者工具Network面板查看响应头,确认是否存在Cache-Control: public, max-age=5,若返回no-cache则说明缓存未生效。

4. 验证Aspire服务关联状态

  • 打开Aspire Dashboard(默认http://localhost:18888),检查rediscache容器是否正常运行,前端项目是否已关联该服务。
  • 尝试手动配置连接字符串跳过Aspire自动注入,验证缓存逻辑本身:
    在前端项目appsettings.json中添加:
"ConnectionStrings": {
    "rediscache": "redis://localhost:6379"
}

重启应用测试,若手动配置后缓存生效,说明Aspire服务引用存在配置异常。

5. 检查Redis缓存写入情况

使用Redis CLI或可视化工具(如RedisInsight)连接本地实例,执行KEYS *命令,查看是否存在OutputCache前缀的键值:

  • 若无相关键,说明缓存逻辑未触发;
  • 若有键但页面仍实时更新,可能是请求参数导致缓存键每次都不同,可通过特性忽略查询参数:
[OutputCache(Duration = 5, VaryByQueryKeys = new string[0])]

6. 排除浏览器缓存干扰

开发环境下浏览器可能默认禁用缓存,使用隐私模式测试,或在Network面板取消勾选"Disable cache"选项。


内容的提问来源于stack exchange,提问作者user9566597

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 18:05:23