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

关于MemoryCache中SetSize方法的作用与大小限制的疑问

MemoryCache中SetSize的作用及常见问题解答

1. SetSize的核心作用

  • SetSize不是限制单条缓存条目本身的大小,它是给当前缓存条目分配一个自定义权重值,和MemoryCache的全局容量限制(通过MemoryCacheOptions.SizeLimit配置)配合使用。当所有缓存条目的权重总和超过全局SizeLimit时,MemoryCache会按默认的LRU(最近最少使用)策略淘汰旧条目,释放缓存空间。

2. SetSize的单位

  • 它没有固定的KB/MB这类物理单位,完全是自定义的整数规则。比如你可以约定1单位代表1KB,或者1单位代表1MB,只要全局SizeLimit和所有缓存条目的SetSize遵循同一规则即可。

3. 缓存内容实际大小超过SetSize设置值的情况

  • 既不会抛出异常,也不会阻止缓存这条数据。因为SetSize只是标记权重,不做实际大小校验。比如你给实际3.3KB的缓存设置SetSize(1024)(假设你约定1单位=1字节,那1024就是1KB),MemoryCache依然会正常缓存这条数据,只是计算总权重时会按1024统计。但如果全局SizeLimit是按字节配置的,这种权重和实际内存占用不匹配的情况,可能导致缓存提前淘汰或者内存占用超出预期。

补充示例(按字节匹配权重)

如果想让权重和实际内存占用对应,可这样配置:

// 全局缓存配置,设置总容量为1MB(按字节计算)
services.AddMemoryCache(options =>
{
    options.SizeLimit = 1024 * 1024;
});

// 缓存条目设置,按实际数据字节数设置权重
var cacheEntryOptions = new MemoryCacheEntryOptions()
    .SetSlidingExpiration(TimeSpan.FromSeconds(600))
    .SetAbsoluteExpiration(TimeSpan.FromSeconds(3600))
    .SetPriority(CacheItemPriority.Normal)
    .SetSize(3379); // 对应3.3KB左右的实际数据大小

_cache.Set(myKey, myData, cacheEntryOptions);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:56:01