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

.NET Core如何从appsettings中获取并设置IMemoryCache缓存过期时间

第一步:在appsettings.json中添加缓存配置节点

新增缓存时长配置节点,示例如下:

{
  "CacheSettings": {
    "CredentialSlidingExpirationMinutes": 30
  }
}

可根据业务需求调整数值,也可以自定义单位(比如秒、小时),后续代码对应转换即可。

第二步:封装配置映射实体类

新建CacheSettings.cs类,用于和配置节点绑定:

public class CacheSettings
{
    /// <summary>
    /// 凭证缓存滑动过期时长,单位:分钟
    /// </summary>
    public int CredentialSlidingExpirationMinutes { get; set; }
}

类的属性名要和appsettings中的配置项名完全对应,才能正常绑定取值。

第三步:服务注册

根据你使用的.NET版本,在对应启动文件中添加注册逻辑:

.NET 6及以上版本(Program.cs)

// 绑定配置节点到实体类
builder.Services.Configure<CacheSettings>(builder.Configuration.GetSection("CacheSettings"));
// 注册内存缓存服务
builder.Services.AddMemoryCache();
// 注册你自定义的缓存处理类,示例中接口为IMemoryCacheHelper,实现类为MemoryCacheHelper
builder.Services.AddScoped<IMemoryCacheHelper, MemoryCacheHelper>();

.NET 5及更早版本(Startup.cs的ConfigureServices方法)

public void ConfigureServices(IServiceCollection services)
{
    // 绑定配置节点到实体类
    services.Configure<CacheSettings>(Configuration.GetSection("CacheSettings"));
    // 注册内存缓存服务
    services.AddMemoryCache();
    // 注册自定义缓存处理类
    services.AddScoped<IMemoryCacheHelper, MemoryCacheHelper>();
    // 原有其他服务注册逻辑保留即可
}
第四步:在自定义缓存类中注入配置使用

在你封装的缓存处理类的构造函数中注入配置,读取过期时长赋值给SetSlidingExpiration参数即可,示例如下:

public class MemoryCacheHelper : IMemoryCacheHelper
{
    private readonly IMemoryCache _memoryCache;
    private readonly TimeSpan _credentialSlidingExpiration;

    public MemoryCacheHelper(IMemoryCache memoryCache, IOptions<CacheSettings> cacheOptions)
    {
        _memoryCache = memoryCache;
        // 转换为TimeSpan类型,若配置值非法可在此处设置默认值兜底
        int expireMinutes = cacheOptions.Value.CredentialSlidingExpirationMinutes;
        _credentialSlidingExpiration = TimeSpan.FromMinutes(expireMinutes > 0 ? expireMinutes : 10);
    }

    // 你封装的凭证缓存读取方法示例
    public async Task<Credential> GetCredentialAsync(int id)
    {
        string cacheKey = $"Credential_{id}";
        return await _memoryCache.GetOrCreateAsync(cacheKey, async entry =>
        {
            // 直接使用预读取的过期时长配置
            entry.SetSlidingExpiration(_credentialSlidingExpiration);
            // 此处写数据库查询凭证的逻辑
            return await GetCredentialFromDbAsync(id);
        });
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 11:15:02