在控制器类中,我有
using Microsoft.Extensions.Caching.Memory;
private IMemoryCache _cache;
private readonly MemoryCacheEntryOptions CacheEntryOptions = new MemoryCacheEntryOptions()
.SetSize(1)
// Keep in cache for this time
.SetAbsoluteExpiration(TimeSpan.FromSeconds(CacheExpiryInSeconds));
在Startup.cs中,我有
public class MyMemoryCache
{
public MemoryCache Cache { get; set; }
public MyMemoryCache()
{
Cache = new MemoryCache(new MemoryCacheOptions
{
SizeLimit = 1024,
});
}
}
这些各种尺寸设置是什么意思?
这是.NET Core 2.1。
答案 0 :(得分:11)
我能够找到一些有用的documentation。
SizeLimit没有单位。如果已设置缓存大小限制,则缓存条目必须以它们认为最合适的单位指定大小。缓存实例的所有用户应使用相同的单位系统。如果缓存的条目大小的总和超过SizeLimit指定的值,则不会缓存该条目。如果未设置缓存大小限制,则条目上设置的缓存大小将被忽略。
事实证明,SizeLimit可以作为条目数量的限制,而不是这些条目的大小。
一个快速示例应用程序显示SizeLimit为1,以下内容:
var options = new MemoryCacheEntryOptions().SetSize(1);
cache.Set("test1", "12345", options);
cache.Set("test2", "12345", options);
var test1 = (string)cache.Get("test1");
var test2 = (string)cache.Get("test2");
test2
将为空。
依次使用SetSize()
,您可以精确控制条目应限制的大小。例如,在下面的示例中:
var cache = new MemoryCache(new MemoryCacheOptions
{
SizeLimit = 3,
});
var options1 = new MemoryCacheEntryOptions().SetSize(1);
var options2 = new MemoryCacheEntryOptions().SetSize(2);
cache.Set("test1", "12345", options1);
cache.Set("test2", "12345", options2);
var test1 = (string)cache.Get("test1");
var test2 = (string)cache.Get("test2");
test1
和test2
都将存储在缓存中。但是,如果SizeLimit
设置为2
,则只有第一个条目将被成功存储。