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

在ASP.NET Core 7中为Redis设置默认滑动过期时间

在ASP.NET Core 7中设置Redis缓存默认滑动过期的方法

你安装的Microsoft.Extensions.Caching.Redis包(当前更推荐使用Microsoft.Extensions.Caching.StackExchangeRedis)里,Redis的ConfigurationOptions是用来配置连接Redis的核心参数(比如连接地址、超时时间、重试机制等),默认滑动过期并不在这里设置,而是要通过缓存条目选项或自定义缓存服务来实现。

给你两种实用的解决方案:

方案1:每次缓存时手动指定(简单直接)

在使用IDistributedCache的SetAsync方法时,通过DistributedCacheEntryOptions直接设置滑动过期,示例代码如下:

// 注入IDistributedCache
app.MapGet("/cache-test", async (IDistributedCache cache) =>
{
    var cacheKey = "test_key";
    var cacheValue = Encoding.UTF8.GetBytes("Hello Redis Cache");
    
    // 设置默认滑动过期为30分钟
    var options = new DistributedCacheEntryOptions
    {
        SlidingExpiration = TimeSpan.FromMinutes(30)
    };
    
    await cache.SetAsync(cacheKey, cacheValue, options);
    return "缓存已设置,默认滑动过期30分钟";
});

方案2:封装自定义缓存服务(全局统一默认值)

如果想全局统一设置默认滑动过期,避免重复编写配置代码,可以封装一个自定义缓存服务:

  1. 先在Program.cs中注册Redis缓存:
builder.Services.AddStackExchangeRedisCache(options =>
{
    options.Configuration = builder.Configuration.GetConnectionString("Redis"); // 从配置文件读取连接串
    options.InstanceName = "MyApp:"; // 给缓存键加前缀,避免和其他应用冲突
});
  1. 创建自定义缓存服务类:
public class AppCacheService
{
    private readonly IDistributedCache _distributedCache;
    // 定义全局默认滑动过期时间,这里设为30分钟
    private readonly TimeSpan _defaultSlidingExpiration = TimeSpan.FromMinutes(30);

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

    // 封装Set方法,默认应用滑动过期规则
    public async Task SetAsync(string key, string value, TimeSpan? slidingExpiration = null)
    {
        var bytes = Encoding.UTF8.GetBytes(value);
        var options = new DistributedCacheEntryOptions
        {
            SlidingExpiration = slidingExpiration ?? _defaultSlidingExpiration
        };
        await _distributedCache.SetAsync(key, bytes, options);
    }

    // 继续封装Get、Remove等方法,保持缓存逻辑统一
    public async Task<string?> GetAsync(string key)
    {
        var bytes = await _distributedCache.GetAsync(key);
        return bytes != null ? Encoding.UTF8.GetString(bytes) : null;
    }
}
  1. 在Program.cs中注册这个自定义服务:
builder.Services.AddScoped<AppCacheService>();
  1. 使用时直接注入AppCacheService即可,默认应用30分钟滑动过期,也可手动指定其他时长:
app.MapGet("/cache-test", async (AppCacheService cache) =>
{
    await cache.SetAsync("test_key", "Hello Custom Cache"); // 使用默认30分钟滑动过期
    await cache.SetAsync("long_key", "Long Live Cache", TimeSpan.FromHours(1)); // 手动指定1小时过期
    return "缓存设置完成";
});

总结:Redis连接配置(ConfigurationOptions)负责的是与Redis服务器的连接参数,缓存的过期策略需要在缓存条目的选项中控制,你可以根据自己的需求选择上面的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:45:34