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

MemoryCache同时设置AbsoluteExpiration与SlidingExpiration的行为疑问

关于MemoryCache(及LazyCache)过期策略的问题解答

一、创建MemoryCache时的配置理解

  • 你的理解完全正确:创建MemoryCache实例时,仅能通过MemoryCacheOptions.ExpirationScanFrequency设置缓存过期条目的轮询清理间隔,无法全局统一设置缓存条目的过期时间。所有缓存条目的过期规则,必须在调用Add/Set(LazyCache中为Add/GetOrAdd)方法时,通过CacheEntryOptions(对应MemoryCache的MemoryCacheEntryOptions)为每个条目单独配置。

二、同时设置绝对过期与滑动过期的行为

  • 你的测试结果准确:当同时为缓存条目设置AbsoluteExpirationRelativeToNow(比如15分钟)和SlidingExpiration(比如20秒)时,任一条件满足即触发过期:
    • 即使条目被高频访问(比如每秒调用Get()),只要到达15分钟的绝对过期时间,条目就会失效;
    • 如果连续21秒没有被访问,无论是否到达15分钟的绝对过期时间,条目也会失效。
  • 该行为并非可变更的实现细节,而是.NET MemoryCache的规范行为,官方设计逻辑就是两种过期策略取“先触发者”,这个规则是稳定且长期有效的,不会随意更改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:50:54