在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:封装自定义缓存服务(全局统一默认值)
如果想全局统一设置默认滑动过期,避免重复编写配置代码,可以封装一个自定义缓存服务:
- 先在Program.cs中注册Redis缓存:
builder.Services.AddStackExchangeRedisCache(options => { options.Configuration = builder.Configuration.GetConnectionString("Redis"); // 从配置文件读取连接串 options.InstanceName = "MyApp:"; // 给缓存键加前缀,避免和其他应用冲突 });
- 创建自定义缓存服务类:
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; } }
- 在Program.cs中注册这个自定义服务:
builder.Services.AddScoped<AppCacheService>();
- 使用时直接注入
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
相关产品推荐
相关产品推荐

